La maintenance régulière de Windows 11 est indispensable pour conserver un système performant et stable. Plutôt que de répéter manuellement les mêmes opérations chaque semaine, PowerShell vous permet de tout automatiser grâce aux tâches planifiées. Dans ce guide, vous apprendrez à créer des scripts de maintenance complets et à les exécuter automatiquement.
1. Créer une Tâche Planifiée avec PowerShell
Le module ScheduledTasks intégré à Windows 11 permet de créer des tâches directement depuis PowerShell, sans passer par l'interface graphique. Voici comment enregistrer un script de maintenance hebdomadaire :
# Créer une tâche planifiée de maintenance hebdomadaire
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\maintenance.ps1"
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 3AM
$Settings = New-ScheduledTaskSettingsSet -StartWhenAvailable `
-DontStopIfGoingOnBatteries -AllowStartIfOnBatteries
$Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest
Register-ScheduledTask -TaskName "WB-MaintenanceHebdo" `
-Action $Action -Trigger $Trigger -Settings $Settings `
-Principal $Principal -Description "Maintenance automatique WindowsBooster"
Write-Host "✅ Tâche planifiée créée avec succès" -ForegroundColor Green2. Automatiser le Nettoyage Disque
Les fichiers temporaires, caches et résidus de mises à jour s'accumulent au fil du temps. Ce script supprime les fichiers inutiles et libère de l'espace disque automatiquement :
# Script de nettoyage automatique
$paths = @(
"$env:TEMP\*",
"C:\Windows\Temp\*",
"C:\Windows\SoftwareDistribution\Download\*",
"C:\Windows\Prefetch\*.pf"
)
$totalFreed = 0
foreach ($path in $paths) {
$size = (Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue
$totalFreed += $size
}
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
Clear-DnsClientCache
$freedMB = [math]::Round($totalFreed / 1MB, 2)
Write-Host "✅ Nettoyage terminé : $freedMB Mo libérés" -ForegroundColor Green3. Automatiser Windows Update
Gérer les mises à jour manuellement est fastidieux. Avec le module PSWindowsUpdate, vous pouvez automatiser le téléchargement et l'installation des correctifs en dehors des heures de travail :
# Installer le module PSWindowsUpdate si nécessaire
if (-not (Get-Module -ListAvailable -Name PSWindowsUpdate)) {
Install-Module PSWindowsUpdate -Force -Scope CurrentUser
}
Import-Module PSWindowsUpdate
# Télécharger et installer les mises à jour critiques
$updates = Get-WindowsUpdate -MicrosoftUpdate -AcceptAll
if ($updates.Count -gt 0) {
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll `
-AutoReboot:$false -Confirm:$false
Write-Host "✅ $($updates.Count) mise(s) à jour installée(s)" -ForegroundColor Green
} else {
Write-Host "ℹ️ Système déjà à jour" -ForegroundColor Cyan
}4. Surveiller la Santé du Disque
Un disque défaillant peut entraîner des pertes de données catastrophiques. Ce script interroge les attributs S.M.A.R.T. et vous alerte en cas de problème :
# Vérifier la santé des disques physiques
$disks = Get-PhysicalDisk
foreach ($disk in $disks) {
$health = $disk.HealthStatus
$name = $disk.FriendlyName
$media = $disk.MediaType
if ($health -ne "Healthy") {
Write-Host "⚠️ ALERTE: $name ($media) - État: $health" -ForegroundColor Red
# Envoyer une notification par email
$body = "Le disque $name présente un état: $health"
Send-MailMessage -To "[email protected]" -From "[email protected]" `
-Subject "Alerte disque - $env:COMPUTERNAME" -Body $body `
-SmtpServer "smtp.domaine.fr" -ErrorAction SilentlyContinue
} else {
Write-Host "✅ $name ($media) - État: $health" -ForegroundColor Green
}
}
# Vérifier l'espace disponible
Get-Volume | Where-Object { $_.DriveLetter -and $_.SizeRemaining / $_.Size -lt 0.1 } |
ForEach-Object { Write-Host "⚠️ Volume $($_.DriveLetter): moins de 10% libre" -ForegroundColor Yellow }5. Rotation des Logs et Sauvegardes
Les fichiers journaux grossissent continuellement. Une rotation automatique empêche qu'ils ne saturent votre disque. Ce script archive les logs de plus de 7 jours et supprime les archives de plus de 30 jours :
# Rotation des logs et nettoyage des anciennes sauvegardes
$logPath = "C:\Logs\Maintenance"
$archivePath = "C:\Logs\Archives"
$maxLogAge = 7 # jours avant archivage
$maxArchiveAge = 30 # jours avant suppression
if (-not (Test-Path $archivePath)) { New-Item -ItemType Directory -Path $archivePath -Force }
# Archiver les logs récents
Get-ChildItem -Path $logPath -Filter "*.log" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$maxLogAge) } |
ForEach-Object {
$archName = "$archivePath\$($_.BaseName)_$(Get-Date -Format 'yyyyMMdd').zip"
Compress-Archive -Path $_.FullName -DestinationPath $archName -Force
Remove-Item $_.FullName -Force
}
# Supprimer les vieilles archives
Get-ChildItem -Path $archivePath -Filter "*.zip" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$maxArchiveAge) } |
Remove-Item -Force
Write-Host "✅ Rotation des logs terminée" -ForegroundColor Green6. Notifications par Email
Un script de maintenance silencieux ne sert à rien si vous ne savez pas qu'il a rencontré un problème. Intégrez des notifications email pour recevoir un rapport après chaque exécution. Utilisez Send-MailMessage ou configurez un webhook vers Microsoft Teams ou Slack pour centraliser vos alertes.
Pensez également à écrire un fichier de log local avec Start-Transcript au début de chaque script. Cela vous permettra de diagnostiquer les erreurs même si l'envoi d'email échoue.
7. Script de Maintenance Complet
Combinez toutes les étapes précédentes dans un seul script orchestrateur. Enregistrez-le comme tâche planifiée hebdomadaire et votre PC se maintiendra tout seul :
Le script doit démarrer par Start-Transcript, enchaîner le nettoyage disque, la vérification S.M.A.R.T., la rotation des logs, les mises à jour Windows, puis envoyer un rapport final par email. Encapsulez chaque bloc dans un try/catch pour que l'échec d'une étape n'arrête pas les suivantes.
Start-Transcript -Path "C:\Logs\maintenance_$(Get-Date -Format 'yyyyMMdd').log" au début de votre script principal pour conserver une trace complète de chaque exécution. Vous pourrez ainsi diagnostiquer les problèmes sans effort.
🚀 198+ Scripts de Maintenance Prêts à l'Emploi
WindowsBooster intègre plus de 198 scripts PowerShell de maintenance, nettoyage et optimisation, le tout avec une interface graphique intuitive.
Lancer WindowsBoosterConclusion
Automatiser la maintenance de Windows 11 avec PowerShell transforme des corvées répétitives en processus fiables et autonomes. En combinant nettoyage, mises à jour, surveillance disque et rotation des logs dans une tâche planifiée, vous garantissez des performances optimales sans intervention manuelle. Pour aller plus loin, découvrez nos guides sur les scripts PowerShell d'optimisation et les tâches planifiées Windows 11.