En este tutorial, veremos cómo eliminar archivos con más de X días de antigüedad usando PowerShell.
Este tipo de script se utiliza a menudo en las empresas en los servidores para rotar registros.
Si tomamos el ejemplo de IIS, los registros nunca se eliminan, lo que significa que después de 3 años, terminamos con más de 1.000 archivos para un sitio.
Para empezar, necesitaremos dos variables:
$LogsPath
: que definirá la ubicación donde queremos eliminar los registros$MaxDayToKeep
: que indicará el número de días que deseamos conservar
Comenzaremos con la variable por $LogPath
.
$LogPath = "C:\inetpub\logs"
Para esta variable nada complicado, solo hay que indicar la ruta donde se encuentran los archivos.
Para la variable $MaxDayToKeep dependerá de la solución que vayas a seleccionar para recuperar los archivos, en este tutorial veremos 2 y dependiendo de la solución $MaxDayToKeep tomará un valor positivo o negativo.
$MaxDayToKeep = -5
$MaxDayToKeep = 5
Con las variables declaradas, ahora pasaremos al primer paso del script, que es recuperar los archivos que queremos eliminar. Para este paso hay multitud de formas de realizarlo, aquí van dos:
Método 1 con un valor negativo para $MaxDayToKeep:
$FilesToDelete = dir $LogPath -Recurse -File *.log | Where LastWriteTime -lt ((get-date).AddDays($MaxDayToKeep))
Método 2 con valor positivo pero que se realiza en 2 instrucciones:
$LastWrite = $Now.AddDays(-$MaxDayToKeep )
$FilesToDelete = Get-ChildItem $LogPath -Recurse | Where-Object { $_.Name -like "*.log" } | Where-Object { $_.lastWriteTime -le "$lastwrite" } | Select-Object FullName
El segundo paso será iterar a través de los archivos recuperados en la variable $FilesToDelete y eliminarlos.
if ($FilesToDelete .Count -gt 0){
ForEach ($item in $FilesToDelete ){
Remove-Item $item.FullName -Verbose
}
}
Ahora tenemos todos los elementos para realizar un guión.
Método 1 :
Método 2 :
Ahora sabe cómo configurar la rotación de registros en Windows con PowerShell.