Ci risiamo, ieri mi contatta un collega e mi chiede se si può fare qualcosa per cancellare i logs nel nostro server. Okay loggare….ma inutile tenere file troppo vecchi, non ha senso.
Il concetto non è sbagliato ma, non è che voglio aggiungere un’attività manuale di questo tipo a “valore 0” alle cose che già vengono fatte “a manella”…bisogna automatizzare!
Quindi mi metto alla ricerca di una soluzione pratica, veloce e di facile attuazione ed ecco che vedo la luce in un semplice script di 2 sole righe di Powershell pubblicato in questo post:https://devblogs.microsoft.com/scripting/erase-files-based-on-date-by-using-powershell/
Il codice è il seguente
$Now=Get-Date Get-Childitem D:\Syslog\*.log | Where-Object { $_.LastWriteTime –lt $Now.AddDays(-20) } | Remove-Item
Come funziona:
- $Now=Get-Date: altro non fa che mettere la data di oggi [Get-Date] nella variabile $Now
- Get-Chilitem D:\Syslog\*.log: prende in considerazione tutti i file con estensione .log all’interno della cartella d\:Syslog
- | Where-Object { $_.LastWriteTime –lt $Now.AddDays(-20) } |: qui andiamo ad aggiungere la condizione, un filtro da applicare ai nostri file di log. Infatti vogliamo considerare solo quelli che hanno LastWriterTime più vecchio di 20 giorni (-20)
- Remove-Item: una volta individuati i file che soddisfano il nostro filtro andiamo a cancellarli appunto con il comando Remove-Item.
CONSIGLIO: prima di procedere con la cancellazione -whatif al termine dello script, in questo modo:
$Now=Get-Date Get-Childitem D:\Syslog\*.log | Where-Object { $_.LastWriteTime –lt $Now.AddDays(-20) } | Remove-Item –whatif
Ti permetterà di eseguire lo script senza cancellare i file, così avrai la possibilità di avere la lista che saranno impattati….senza rischiare niente.
Meglio non rischiare…😅