PowerShell · 07.02.2025

Добро пожаловать отсюда

Логическое продолжение этого и вот этого постов.

Вот сюда добавил информацию о размере виртуального диска, а ещё нарастил функцию удаления дисков профилей годичной давности, основываясь на дате изменения контейнера.

Нужно только указать актуальное значение переменной $backupdir.

# Заголовок скрипта #
[System.Console]::Title = "Перемещенные диски пользователей"

# Переменные #
$backupdir = "\\RDS\c$\Profiles\VHDXDISABLE"
$disks = (Get-ChildItem -Path $backupdir).BaseName
$dirsize = "{0:N2} Гб" -f ((Get-ChildItem $backupdir -Force -ErrorAction SilentlyContinue | Measure-Object Length -sum).sum/1Gb)
$sids = $disks -replace "UVHD-", ""

# Формирование таблицы #
$result = foreach($sid in $sids)
{
    $username = (Get-ADUser -Identity $sid).Name
    $disk = "UVHD-$sid.vhdx"
    $size = (Get-ChildItem -Path $backupdir\$disk).Length/1MB
    [PsCustomObject]@{"Имя пользователя" = $username; "Диск" = $disk; "Размер (МБ)" = $size}
}

# Вывод данных #
$result | Sort-Object -Property "Имя пользователя" | ft -AutoSize
Write-Host "Общий размер директории: $dirsize" -ForegroundColor Cyan
Write-Host

# Удаление файлов #
Write-Host "Удалить файлы старше 1 года?" -ForegroundColor Red
$choice = Read-Host "Введите Yes для удаления или закройте это окно"
switch($choice)
{
   Yes 
   {
        Clear
        Write-Host "Скоро начнётся операция удаления файлов!" -ForegroundColor Red
        Write-Host "Ctrl+C для отмены операции..." -ForegroundColor Red
        Sleep(15)
        Get-ChildItem –Path $backupdir |
         Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-365))} |
         Remove-Item -ErrorAction Continue -Verbose
        Write-Host "Операция удаления завершена!" -ForegroundColor Green
   }
   default { Write-Host "Некорректный ввод варианта выбора" -ForegroundColor Red }
}

# Ожидание действия от пользователя #
Read-Host

PS: размер дисков в таблице вывода будет указан в мегабайтах, а общий объём хранилища в гигабайтах.