Skip to main content

Powershell borrar copias anteriores

En muchas ocasiones nos encontramos con procesos de copia de seguridad que no disponen de una política de retención adecuada, este es, realizan copias de seguridad sin borrar las copias que tienen determinados días o meses de antiguedad (por ejemplo las copias realizadas con scripts de backup desde MSSQL Server)

Para prevenir que el disco llegue a llenarse por completo con las copias, podemos realizar un script que se ejecute de forma diaria, y que borre los archivos de una carpeta y subcarpetas que sean anteriores a la fecha actual menos X días

El script es muy sencillo

Get-ChildItem –Path "C:\COPIAS\MSSQLSERVER" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item 

En este ejemplo el script realiza el borrado de los archivos que se encuentran en la carpeta C:\COPIAS\MSSQLSERVER, que tengan más de 30 días de antiguedad

Si por ejemplo tenemos copias diarias y mensuales, con un backup que se ejecute por ejemplo todos los días a una determinada hora, y un backup mensual que se ejecute los días 1 de cada mes. El script seria de la siguiente forma:

Get-ChildItem –Path "C:\COPIAS\MSSQLSERVER\DIARIAS" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item 
Get-ChildItem –Path "C:\COPIAS\MSSQLSERVER\MENSUALES" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-366))} | Remove-Item