106 lines
3.1 KiB
PowerShell
106 lines
3.1 KiB
PowerShell
# 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
|