commit d6adee5ad9bf175ca203068bb238b32f0019ca34 Author: Sebastien Plante Date: Tue Nov 25 11:37:20 2025 -0500 first commit diff --git a/Cleanup-OldFiles.ps1 b/Cleanup-OldFiles.ps1 new file mode 100644 index 0000000..a46da06 --- /dev/null +++ b/Cleanup-OldFiles.ps1 @@ -0,0 +1,105 @@ +# Script de housekeeping - Suppression des fichiers de plus de 3 heures +# PowerShell + +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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..645dacf --- /dev/null +++ b/README.md @@ -0,0 +1,114 @@ +# Folder Housekeeping + +Script PowerShell pour effectuer le nettoyage automatique d'un dossier en supprimant les fichiers obsolètes. + +## 📋 Description + +`Cleanup-OldFiles.ps1` est un script PowerShell conçu pour Windows 10 IoT et Windows 10/11 qui supprime automatiquement les fichiers dont la date de dernière modification dépasse un certain âge (en heures). + +### Fonctionnalités + +- ✅ Suppression récursive des fichiers obsolètes +- ✅ Configuration flexible de la durée de rétention +- ✅ Mode simulation (`-WhatIf`) pour tester sans supprimer +- ✅ Journalisation complète avec horodatage +- ✅ Gestion robuste des erreurs +- ✅ Compatible Windows 10 IoT / PowerShell natif + +## 🚀 Utilisation + +### Syntaxe + +```powershell +.\Cleanup-OldFiles.ps1 -FolderPath [-HoursOld ] [-WhatIf] +``` + +### Paramètres + +| Paramètre | Obligatoire | Description | Défaut | +| ------------- | ----------- | ------------------------------------------------------------------------------ | ------ | +| `-FolderPath` | ✅ Oui | Chemin du dossier à nettoyer | - | +| `-HoursOld` | ❌ Non | Nombre d'heures (âge minimum des fichiers à supprimer) | 24 | +| `-WhatIf` | ❌ Non | Mode simulation - affiche ce qui serait supprimé sans effectuer la suppression | - | + +### Exemples + +#### Supprimer les fichiers de plus de 24 heures (défaut) + +```powershell +.\Cleanup-OldFiles.ps1 -FolderPath "C:\Logs" +``` + +#### Supprimer les fichiers de plus de 3 heures + +```powershell +.\Cleanup-OldFiles.ps1 -FolderPath "C:\Temp" -HoursOld 3 +``` + +#### Mode simulation (aperçu sans suppression) + +```powershell +.\Cleanup-OldFiles.ps1 -FolderPath "C:\Data" -HoursOld 48 -WhatIf +``` + +## 📅 Automatisation + +### Planificateur de tâches Windows + +Pour exécuter le script automatiquement, vous pouvez créer une tâche planifiée : + +```powershell +# Créer une tâche qui s'exécute quotidiennement à 3h du matin +$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File C:\Scripts\Cleanup-OldFiles.ps1 -FolderPath C:\Logs -HoursOld 24" +$trigger = New-ScheduledTaskTrigger -Daily -At 3am +$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest +Register-ScheduledTask -TaskName "Housekeeping-Logs" -Action $action -Trigger $trigger -Principal $principal -Description "Nettoyage automatique des logs" +``` + +### Tâche toutes les heures + +```powershell +$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File C:\Scripts\Cleanup-OldFiles.ps1 -FolderPath C:\Temp -HoursOld 3" +$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration ([TimeSpan]::MaxValue) +$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest +Register-ScheduledTask -TaskName "Housekeeping-Temp" -Action $action -Trigger $trigger -Principal $principal +``` + +## 📊 Sortie du script + +Le script affiche des logs horodatés pour chaque opération : + +```text +[2025-11-25 14:30:00] Démarrage du housekeeping sur: C:\Temp +[2025-11-25 14:30:00] Suppression des fichiers plus vieux que 3 heures +[2025-11-25 14:30:00] Date limite: 2025-11-25 11:30:00 +[2025-11-25 14:30:01] Nombre de fichiers à supprimer: 15 +[2025-11-25 14:30:01] Supprimé: C:\Temp\old_file1.txt +[2025-11-25 14:30:01] Supprimé: C:\Temp\old_file2.log +... +[2025-11-25 14:30:05] ---------------------------------------- +[2025-11-25 14:30:05] Housekeeping terminé +[2025-11-25 14:30:05] Fichiers supprimés: 15 +[2025-11-25 14:30:05] Erreurs: 0 +``` + +## ⚙️ Prérequis + +- Windows 10 IoT / Windows 10 / Windows 11 +- PowerShell 5.1 ou supérieur +- Droits d'accès en écriture sur le dossier cible + +## 🔒 Sécurité + +- Le script vérifie l'existence du dossier avant toute opération +- Gestion des erreurs pour chaque fichier individuellement +- Mode `WhatIf` pour valider les suppressions avant exécution +- Code de sortie approprié (0 = succès, 1 = erreur) + +## 📝 Licence + +Script libre d'utilisation. + +## 👤 Auteur + +Créé pour l'automatisation du housekeeping sur Windows 10 IoT.