Powershell Elimina archivos de más de X días, pero conserva al menos 1

Powershell Elimina archivos de más de X días, pero conserva al menos 1

Actualmente hago una copia de seguridad de las configuraciones de mi conmutador/enrutador automáticamente cada vez que escribimos cambios... Esto se hace mediante ftp enviando un archivo de texto a una carpeta.

Estoy intentando escribir un script que elimine todos los archivos de un directorio que tengan más de 15 días. Sin embargo, quiero conservar el archivo más reciente para cada dispositivo, incluso si tiene más de 15 días.

El formato del nombre del archivo es el siguiente: El último nombre del archivo es Nombre de host-Config-Change.txt cuando se sobrescribe con un cambio más reciente, se le cambia el nombre a: Nombre de host-Config-Change_MM-DD-AA_HH-MM-SS_Time.txt

Creo que la forma más sencilla de lograrlo es eliminar todos los archivos de más de 15 días con la fecha y hora en el nombre. No tengo idea de cómo abordar esto y, aunque encontré formas de hacer cualquiera de las dos cosas, no encontré la manera de hacer ambas cosas.

Gracias de antemano por cualquier ayuda que pueda brindar.

Este es mi código hasta ahora. Ahora estoy en PowerShell, por lo que agradecería cualquier consejo.

#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

Respuesta1

Sólo para facilitar su uso para todos los que puedan seguir. Usando las respuestas anteriores, pude descubrir cómo usar expresiones regulares para simplemente mirar cualquier archivo con una fecha en el nombre del archivo que tenga más de X días. El archivo más reciente no contiene una fecha en el nombre del archivo, por lo que funcionó para mí. Tenga en cuenta que tendrá que ajustar la expresión regular según la sintaxis de la fecha.

#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

información relacionada