Размер корзин пользователей в Windows Server 2019?

Вопрос или проблема

Есть ли способ показать размер корзины для каждого пользователя в Windows Server 2019?

(Или, возможно, рассчитать такие размеры с помощью PowerShell, а затем отобразить их в аккуратной таблице?)

У нас могут быть процессы или приложения, запущенные бесконтрольно, которые заполняют корзину, а следовательно, и диск:

TreeSize - занятие пространства корзинами

Очистка диска, похоже, не очень полезна: она, кажется, показывает только размер корзины текущего пользователя:

Очистка диска Windows

Запуск чего-то подобного на целевом сервере:

(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-скриптом. Этот скрипт предоставляет информацию о размерах корзин для всех пользователей на сервере и отображает результаты в виде таблицы.

Шаги для реализации

  1. Запустите PowerShell с правами администратора. Это необходимо для доступа к системным каталогам и файлам.

  2. Используйте следующий 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 и для выполнения скрипта.

Этот скрипт должен помочь вам эффективно получить размеры корзин пользователей на сервере и отслеживать накопление файлов, чтобы избежать излишней загрузки диска.

Оцените материал
Добавить комментарий

Капча загружается...