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 :

  • $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.

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

1 réflexion au sujet de « PowerShell : supprimer automatiquement les fichiers de plus de X jours »

Laisser un commentaire