Вопрос или проблема
Есть ли способ показать размер корзины для каждого пользователя в Windows Server 2019?
(Или, возможно, рассчитать такие размеры с помощью PowerShell, а затем отобразить их в аккуратной таблице?)
У нас могут быть процессы или приложения, запущенные бесконтрольно, которые заполняют корзину, а следовательно, и диск:
Очистка диска, похоже, не очень полезна: она, кажется, показывает только размер корзины текущего пользователя:
Запуск чего-то подобного на целевом сервере:
(Get-ChildItem -LiteralPath 'C:\$Recycle.Bin' -File -Force -Recurse -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
… даст мне общий размер корзины, но:
- не показывает владельца
- похоже, что занимает вечность, в некоторых случаях > 12 часов, после чего я должен остановить его, так как серверы обрабатывают производственные рабочие нагрузки.
Какой лучший способ получить таблицу, где отображаются владельцы файлов и папок вместе с общим размером файлов и папок, которые они владеют, для всех корзин пользователей на диске C:
сервера?
пользователь директория размер
--- ---
sergio корзина 20GB
rene корзина 1GB
spunky корзина 100GB
system корзина 300TB
admin корзина 10GB
Я использую этот скрипт в PowerShell, и он действительно полезен:
$recycleBinPath="C:\$Recycle.Bin"
# Получить папки
$sidFolders = Get-ChildItem -Path $recycleBinPath -Directory -Force
$results = @()
foreach ($sidFolder in $sidFolders) {
# sid папки
$sid = $sidFolder.Name
# Получить имя пользователя
try {
$user = (New-Object System.Security.Principal.SecurityIdentifier($sid)).Translate([System.Security.Principal.NTAccount]).Value
} catch {
$user = "Неизвестный пользователь($sid)"
}
# Получить размер папки
$size = Get-ChildItem -Path $sidFolder.FullName -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
if ($size.Sum -gt 0) {
# размер корзины:
$results += [PSCustomObject]@{
'Пользователь' = $user
'Размер (MB)' = [Math]::Round($size.Sum / 1MB, 2)
}
}
}
# Показать результаты:
if ($results.Count -gt 0) {
$results | Sort-Object 'Размер (MB)' -Descending | Format-Table -AutoSize
} else {
Write-Host "Нет результатов"
}
Ответ или решение
Чтобы получить размеры корзин (Recycle Bin) пользователей на Windows Server 2019, вы можете воспользоваться следующим PowerShell-скриптом. Этот скрипт предоставляет информацию о размерах корзин для всех пользователей на сервере и отображает результаты в виде таблицы.
Шаги для реализации
-
Запустите PowerShell с правами администратора. Это необходимо для доступа к системным каталогам и файлам.
-
Используйте следующий PowerShell-скрипт:
$recycleBinPath="C:\$Recycle.Bin"
# Получаем папки пользователей в корзине
$sidFolders = Get-ChildItem -Path $recycleBinPath -Directory -Force
$results = @()
foreach ($sidFolder in $sidFolders) {
# SID папки
$sid = $sidFolder.Name
# Получаем имя пользователя
try {
$user = (New-Object System.Security.Principal.SecurityIdentifier($sid)).Translate([System.Security.Principal.NTAccount]).Value
} catch {
$user = "Неизвестный пользователь ($sid)"
}
# Получаем размер папки
$size = Get-ChildItem -Path $sidFolder.FullName -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
if ($size.Sum -gt 0) {
# Добавляем размер в результаты
$results += [PSCustomObject]@{
'Пользователь' = $user
'Размер (MB)' = [Math]::Round($size.Sum / 1MB, 2)
}
}
}
# Отображаем результаты
if ($results.Count -gt 0) {
$results | Sort-Object 'Размер (MB)' -Descending | Format-Table -AutoSize
} else {
Write-Host "Нет результатов"
}
Описание скрипта
-
Получение SID пользователей: Скрипт обращается к каталогу
C:\$Recycle.Bin
, где хранятся корзины для всех пользователей, и извлекает имена папок, которые представляют собой SID пользователей. -
Преобразование SID в имя пользователя: Используется метод
Translate
для получения имени пользователя из его SID. Если пользователь не может быть найден, выводится сообщение о неизвестном пользователе. -
Расчет размеров: Скрипт рекурсивно вычисляет общий размер файлов в каждой из папок пользователей.
-
Вывод результатов: Информация о размере корзины пользователя отображается в отсортированной таблице.
Примечания
-
Время выполнения: Если у вас большие корзины или много пользователей, выполнение скрипта может занять некоторое время. Возможно, вам придется оптимизировать запрос или запускать его в период низкой нагрузки на сервер.
-
Безопасность и права доступа: Убедитесь, что у вас есть все необходимые права для доступа к папке
$Recycle.Bin
и для выполнения скрипта.
Этот скрипт должен помочь вам эффективно получить размеры корзин пользователей на сервере и отслеживать накопление файлов, чтобы избежать излишней загрузки диска.