# PowerShell Housekeeping Script - Delete files older than specified hours # # by Sebastien Plante # Version 1.0 - Initial release - 2025-11-25 param( [Parameter(Mandatory = $false)] [string]$FolderPath = "", [Parameter(Mandatory = $false)] [int]$HoursOld = 24, [Parameter(Mandatory = $false)] [switch]$WhatIf ) # Fonction pour écrire les logs function Write-Log { param([string]$Message) $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" Write-Host "[$timestamp] $Message" } # Fonction pour afficher l'usage function Show-Usage { Write-Host "" Write-Host "USAGE: .\Cleanup-OldFiles.ps1 -FolderPath [-HoursOld ] [-WhatIf]" -ForegroundColor Yellow Write-Host "" Write-Host "PARAMETRES:" -ForegroundColor Cyan Write-Host " -FolderPath : Chemin du dossier à nettoyer (OBLIGATOIRE)" Write-Host " -HoursOld : Nombre d'heures (par défaut: 24)" Write-Host " -WhatIf : Mode simulation sans suppression réelle" Write-Host "" Write-Host "EXEMPLES:" -ForegroundColor Cyan Write-Host " .\Cleanup-OldFiles.ps1 -FolderPath `"C:\VotreDossier`"" Write-Host " .\Cleanup-OldFiles.ps1 -FolderPath `"C:\VotreDossier`" -HoursOld 3" Write-Host " .\Cleanup-OldFiles.ps1 -FolderPath `"C:\VotreDossier`" -WhatIf" Write-Host "" } # Vérifier si FolderPath est fourni if ([string]::IsNullOrWhiteSpace($FolderPath)) { Write-Host "ERREUR: Le paramètre -FolderPath est obligatoire." -ForegroundColor Red Show-Usage exit 1 } # Vérifier si le dossier existe if (-not (Test-Path -Path $FolderPath)) { Write-Log "ERREUR: Le dossier '$FolderPath' n'existe pas." exit 1 } Write-Log "Démarrage du housekeeping sur: $FolderPath" Write-Log "Suppression des fichiers plus vieux que $HoursOld heures" # Calculer la date limite $dateLimit = (Get-Date).AddHours(-$HoursOld) Write-Log "Date limite: $dateLimit" # Récupérer les fichiers à supprimer $filesToDelete = Get-ChildItem -Path $FolderPath -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $dateLimit } $fileCount = ($filesToDelete | Measure-Object).Count if ($fileCount -eq 0) { Write-Log "Aucun fichier à supprimer." exit 0 } Write-Log "Nombre de fichiers à supprimer: $fileCount" # Supprimer les fichiers $deletedCount = 0 $errorCount = 0 foreach ($file in $filesToDelete) { try { if ($WhatIf) { Write-Log "WhatIf: Suppression de '$($file.FullName)' (Modifié: $($file.LastWriteTime))" } else { Remove-Item -Path $file.FullName -Force -ErrorAction Stop Write-Log "Supprimé: $($file.FullName)" $deletedCount++ } } catch { Write-Log "ERREUR lors de la suppression de '$($file.FullName)': $_" $errorCount++ } } # Résumé Write-Log "----------------------------------------" if ($WhatIf) { Write-Log "Mode WhatIf - Aucune suppression effectuée" Write-Log "Fichiers qui seraient supprimés: $fileCount" } else { Write-Log "Housekeeping terminé" Write-Log "Fichiers supprimés: $deletedCount" Write-Log "Erreurs: $errorCount" } exit 0