← Retour aux articles

Automatiser la Maintenance de Windows 11 avec PowerShell

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 Green

2. 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 Green

3. 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 Green
⚠️ Attention : Exécutez toujours vos scripts de maintenance avec les droits administrateur. Créez un point de restauration système avant de modifier les services ou les paramètres du registre. Testez vos scripts sur une machine non-critique avant de les déployer en production.

6. 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.

💡 Astuce : Utilisez 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.
🤖 IA et Automatisation : Ayi NEDJIMI Consultants développe des outils d'automatisation propulsés par l'IA pour la cybersécurité et l'optimisation système.

🚀 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 WindowsBooster

Conclusion

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.

🐦 Twitter 💼 LinkedIn 📘 Facebook