Powershell Удалить файлы старше X дней, но оставить не менее 1

Powershell Удалить файлы старше X дней, но оставить не менее 1

В настоящее время я автоматически создаю резервную копию конфигураций моего коммутатора/маршрутизатора каждый раз, когда мы записываем изменения... Это делается путем отправки текстового файла в папку по FTP.

Я пытаюсь написать скрипт, который удалит все файлы в каталоге старше 15 дней. Однако я хочу сохранить последний файл для каждого устройства, даже если он старше 15 дней.

Формат именования файлов следующий: Последнее имя файла — Hostname-Config-Change.txt, при его перезаписи более новым изменением он переименовывается в: Hostname-Config-Change_MM-DD-YY_HH-MM-SS_Time.txt

Я думаю, что самый простой способ сделать это — удалить все файлы старше 15 дней с датой и временем в имени. Я понятия не имею, как к этому подойти, и хотя я нашел способы сделать любой из этих способов, я не нашел способа сделать оба.

Заранее благодарим за любую помощь, которую вы можете оказать.

Вот мой код на данный момент. Теперь я использую powershell, поэтому любые советы будут оценены.

#Set Variables

# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)

#Set path of Files to be scanned & deleted
$path = "Directory to Files"

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

#End of Script

решение1

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

#Set Variables

# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)

#Set path of Files to be scanned & deleted
$path = "D:\BACKUPS\ConfigChange"

# Delete files older than the $limit and matching the dates in the file name.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.BaseName -match '(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})' -and $_.CreationTime -lt $limit } | Remove-Item -Force

#End of Script

Связанный контент