first commit
This commit is contained in:
105
Cleanup-OldFiles.ps1
Normal file
105
Cleanup-OldFiles.ps1
Normal file
@@ -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 <chemin> [-HoursOld <heures>] [-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
|
||||
114
README.md
Normal file
114
README.md
Normal file
@@ -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 <chemin> [-HoursOld <heures>] [-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.
|
||||
Reference in New Issue
Block a user