Powershell: скрипт для удаления бэкапов

Есть необходимость написать скрипт на Powershell для очистки дискового пространства от ненужных папок-бэкапов. Есть основные папки с именами-доменами. Внутри лежат папки с именами датами. Внутри этих папок лежат файлы бэкапа. Логика очистки такая: основные папки-домены удаляются по дате изменения (если старее 30 дней, то удалить), внутренние папки с именами-датами удаляются по именам. Мной написан этот скрипт:

$Folder = "C:\Users\Domain\Desktop\Main" 
$DayPeriod = "-30"
$CurrentDay = Get-Date
$ChangeOfDays = $CurrentDay.AddDays($DayPeriod)
$Backups = Get-ChildItem -Path $Folder

Set-Location $Folder

foreach ($Backup in $Backups) {
    if ($Backup.LastWriteTime -lt ($CurrentDay).AddDays($DayPeriod)) {
            Remove-Item $Backup -recurse
    }   
    else {
            $SurviveFoldersList = ChildItem -path $Backup | Sort-Object -Property Name | Select-Object -Last 10 
            Remove-Item -path $Backup\* -recurse -force -exclude $SurviveFoldersList
    }
}

Этот скрипт как и необходимо удаляет ненужные папки-домены по дате изменения и внутренние папки-даты по названию, но в тех папках-датах, которые он и не удалил он рекурсивно удаляет всё содержимое. То есть, папка остаётся, но пустой без самих нужных файлов бэкапа. Как можно ограничить удаление только на папках-датах?


Ответы (1 шт):

Автор решения: PotroNik

Полное редактирование ответа. Так как работа exclude команды remove-item ведет себя не так как ожидалось, предлагаю поменять процесс удаления:

ChildItem -path $Backup -Directory | Sort-Object -Property Name | Select-Object -SkipLast 10 | Remove-Item -Recurse -Force

Выбирая только те каталоги, которые подходят под удаление пропуская первые 10 Select-Object -SkipLast 10

Отдельный вызов remove-item из скрипта убрать

→ Ссылка