Sep 06 2015

DOS / Powershell: Supprimer les Fichiers plus Vieux que

Publié par à 10:09 sous Windows

Les admins système sont de plus en plus confrontés à des répertoires qui grossissent continuellement, contenant des rapports générés par des scripts ou des tâches planifiées. C’est la même chose pour les répertoires temporaires et personne ne s’attarde à y faire du ménage. Mais n’est-ce pas aussi notre boulot?
Voici 2 scripts simples pouvant être exécutés régulièrement pour supprimer les fichiers plus vieux que disons 30 jours par exemple en DOS ou Powershell.


Effacer les Fichiers sous DOS

Le premier en DOS est plus limité vu que ForFiles ne peut traiter que la date de dernière modification.

Echo @off
Cls

Set Folder=C:\Reports

if exists %Folder% (
  rem *******************************************
  rem Supprime les attributs système et les fichiers cache
  rem qui ne sont pas traités par la commande del
  Forfiles /S /P "%Folder%" /M * /D -30 /C "cmd /c attrib -s -h @path"
  rem Suppression des fichiers plus vieux que 30 jours
  Forfiles /S /P "%Folder%" /M * /D -30 /C "cmd /c del /F /Q @path"

  rem Suppression des répertoires vides
  for /f "delims=" %%d in ('dir /S /B /AD %SrcDir% ^| sort /R') do rmdir "%%d"
)


Supprimer les Fichiers en Powershell


Powershell permet de travailler avec les 3 parametres LastAccessTime, LastWriteTime and CreationTime.

$limit = (Get-Date).AddDays(-30)
$path = "C:\Temp"

if (Test-Path $path) {
  # Efface les fichiers plus vieux que $limit jours.
  Get-ChildItem -Path $path -Recurse | 
  Where-Object { !$_.PSIsContainer -and $_.lastAccessTime -lt $limit } |
  Remove-Item -Force

  # Supprime les dossiers laissés vides après la suppression des vieux fichiers.
  Get-ChildItem -Path $path -Recurse |
  Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse |
  Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
}


Pour exécuter le script, vérifier les restrictions powershell avec

Get-ExecutionPolicy


Si l’état restreint est actif, exécuter

Set-ExecutionPolicy RemoteSigned


Et lancer cette commande dans une tâche planifiée pour supprimer les vieux fichiers en Powershell de façon régulière:

powershell C:\Scripts\ClearFolder.ps1

No responses yet

Comments RSS

Leave a Reply