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 шт):
Полное редактирование ответа.
Так как работа 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 из скрипта убрать