miércoles, 21 de diciembre de 2011

Borrar Archivos Viejos Script de PowerShell


Una de las tareas comunes en la administración de servidores es el hecho de tener que realizar de forma periódica un borrado de archivos de Log, de aplicaciones o de servicios como IIS, por ejemplo una politica puede ser "conservar los archivos de log por 6 dias", asi que tenemos que programar una tarea en el servidor para que cada dia (semana, hora, etc) se ejecute la limpieza.

en este post les dejo un script de PowerShell que permite borrar todos los archivos con extensión ".log " en un directorio (y sus subdirectorios), que sean mas viejos que  un numero de dias especificado




$pattern = $args[0] + '\*'
$files = Get-ChildItem $pattern -include *.log -Recurse $days = $args[2] $count = 0; $date = Get-Date "Clean Old IIS Log Files Started $date" | Out-File $args[1] -append -noclobber if ($files.count -gt 1) { foreach($file in $files) { $mark = ((Get-Date) - $file.CreationTime).Days if ($mark -gt $days -and $file.PsISContainer -ne $True) { "file found $file" | Out-File $args[1] -append -noclobber $count += 1; $file.Delete() } } } "Total Deleted Files $count" | Out-File $args[1] -append -noclobber




la forma de usarlo es la siguiente (con algunas simplificaciones)  ( borrar todos los archivos con extension .log de la carpeta de  logs del IIS, con mas de 30 días de antiguedad


powershell -NoProfile -ExecutionPolicy unrestricted -Command "C:\Task\clear_log.ps1 C:\inetpub\logs\LogFiles C:\Task\out.log 30"

 en out.log se escribe el detalle de los archivos eliminados, la hora de ejecucion y el numero total de archivos.