Dans ce tutoriel, on va voir comment supprimer les fichiers de plus X jour à l’aide de PowerShell.
Ce type de script est souvent utilisé en entreprise sur des serveurs afin de faire une rotation de logs.
Si on prend l’exemple de IIS, les logs ne sont jamais effacés, ce qui fait que au bout de 3 ans, on se retrouve avec plus de 1 000 fichiers pour un site.
Pour commencer, on va avoir besoin de deux variables :
$LogsPath
: qui va définir l’emplacement où l’on souhaite supprimer les logs$MaxDayToKeep
: qui va indiquer le nombre de jours que l’on souhaite garder
On va commencer par la variable par $LogPath
.
$LogPath = "C:\inetpub\logs"
Pour cette variable, rien de compliquer, il suffit d’indiquer le chemin où se trouve les fichiers.
Pour la variable $MaxDayToKeep
, cela va dépendre de la solution que vous allez sélectionner pour récupérer les fichiers, dans ce tutoriel, on va en voir 2 et en fonction de la solution $MaxDayToKeep
prendre une valeur positive ou négative.
$MaxDayToKeep = -5
$MaxDayToKeep = 5
Les variables déclarée, on va maintenant passer à la première étape du script, qui est récupéré les fichiers que l’on souhaite supprimer. Pour cette étape, il existe une multitude de façon de faire en voici deux :
Méthode 1 avec une valeur négative pour $MaxDayToKeep
:
$FilesToDelete = dir $LogPath -Recurse -File *.log | Where LastWriteTime -lt ((get-date).AddDays($MaxDayToKeep))
Méthode 2 avec une valeur positive mais qui se faire en 2 instructions :
$LastWrite = $Now.AddDays(-$MaxDayToKeep )
$FilesToDelete = Get-ChildItem $LogPath -Recurse | Where-Object { $_.Name -like "*.log" } | Where-Object { $_.lastWriteTime -le "$lastwrite" } | Select-Object FullName
La deuxième étape va être de parcourir les fichiers récupérer dans la variable $FilesToDelete
et de les supprimer.
if ($FilesToDelete .Count -gt 0){
ForEach ($item in $FilesToDelete ){
Remove-Item $item.FullName -Verbose
}
}
On a maintenant tous les éléments pour faire un script.
Méthode 1 :
Méthode 2 :
Vous savez maintenant mettre en place une rotation de log sur Windows avec PowerShell.