Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Скрипт на PowerShell

Данила Кастырин Мастер (1147), на голосовании 1 год назад
Помогите, пожалуйста, написать в PowerShell следующий скрипт. Его задача: Удалить один самый старый файл из каталога, но с условием, чтобы их там было не менее 25. Как это должно выглядеть: Ежедневно создается 1 файл резервной копии базы, как только их становится 26, скрипт проверяет количество файлов, и если их больше 25, удаляет самый старый, затем снова проверяет кол-во и если условие выполнено, повторяет И как только файлов 25 или меньше , удаление прекращается
Дополнен 1 год назад
И доп условие - удаляемый файл старше 25 дней
Если свежее 25 дней - не удалять
Голосование за лучший ответ
Shash_29 Мастер (1374) 1 год назад
 # Путь к каталогу с файлами резервных копий 
$backupPath = "C:\Path\To\Backup\Folder"

# Получаем список файлов резервных копий, сортируем их по дате создания (от старых к новым)
$backupFiles = Get-ChildItem -Path $backupPath | Sort-Object CreationTime

# Проверяем количество файлов
if ($backupFiles.Count -gt 25) {
# Удаляем самый старый файл
$oldestFile = $backupFiles[0]
Remove-Item -Path $oldestFile.FullName -Force
}
Данила КастыринМастер (1147) 1 год назад
а можно зациклить каким нибудь оператором это? То есть проверил - 25+, удалил старый, снова проверил 25+ удалил еще раз, снова проверил 25- и прекратил
Данила КастыринМастер (1147) 1 год назад
и нужно условие что удаляемый файл должен быть старше 25 дней, а если нет то не удалять
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (264825) 1 год назад
 $backupFolder = "Путь_к_папке_с_бэкапами" 
$n = 5 # Количество последних бэкапов, которые нужно сохранить
$z = 30 # Количество дней, после которых бэкапы будут удалены

# Получить список всех бэкапов в папке
$backups = Get-ChildItem -Path $backupFolder | Where-Object { $_.Extension -eq ".bak" } | Sort-Object -Property LastWriteTime

# Получить бэкапы, которые нужно удалить (старше $z дней, кроме последних $n)
$backupsToDelete = $backups | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$z) } | Select-Object -SkipLast $n

# Удалить бэкапы
foreach ($backup in $backupsToDelete) {
Remove-Item $backup.FullName -Force
Write-Host "Удален бэкап: $($backup.Name)"
}

Write-Host "Операция завершена."
Данила КастыринМастер (1147) 1 год назад
Спасибо, а можно ли это сделать через цикл While?
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (264825) Данила Кастырин, не понимаю зачем усложнять, организуя сложные проверки выхода из цикла..
Похожие вопросы