Site icon RDR-IT

PowerShell : supprimer automatiquement les fichiers de plus de X jours

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 :

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.

Quitter la version mobile