Comment Nettoyer Votre Serveur WSUS Automatiquement
Vous avez installé un serveur WSUS dans votre entreprise ? On le sais ce genre de serveur nécessite tout de même de la maintenance.
Au fur et à mesure les mises à jour s'entassent et consomme beaucoup de volume. D'autant que Microsoft remplace certaines mises à jour par des nouvelles.
Dans mon tutoriel d'installation j'explique comment maintenir le serveur en supprimant manuellement les mises à jour "périmées".
Ce tutoriel vous propose d'automatiser cette tâche.
Sommaire
Rappel sur la maintenance d'un serveur WSUS
Rappelez-vous , nous classons les mises à jour par type de remplacement.
Une fois identifiées nous les refusons, puis nous utilisons l'assistant de nettoyage.
Cette tâche est donc à faire manuellement au moins une fois par mois pour éviter de saturer l'espace disque.
Plus il y a de mises à jour "entassées" et plus le processus est long et fastidieux.
Heureusement il est possible d'automatiser ces tâches grâce au Powershell !
Nettoyage du serveur Wsus grâce à Powershell
Téléchargement du package script + tâche planifiée
Pour automatiser le nettoyage nous nous appuyon sur :
- un script Powershell
- une tâche planifiée
Le package du script (fichier PS1 + Fichier Xml pour importer la tâche planifié) est téléchargeable ici : https://www.tutos-informatique.com/telechargements/Script-Nettoyage-Wsus.zip
Dé-zippez-le dans C:\ , vous devriez donc avoir ensuite le contenu dans un dossier "Script" soit "C:\Script".
Le script est à éditer en fonction du nom/ip de votre serveur. La tâche planifiée est à importer (import du fichier XML).
La tâche est programmée pour excuter le script Powershell le dimanche à 10H
Vous devez également lors de l'import saisir un login et mot de passe d'un compte ayant les droits administrateur !
La configuration de la tâche est bien évidemment entièrement personnalisable.
Script Powershell
Dans le cas ou votre compte n'est pas le compte Administrateur du domaine (le compte administrateur ou administrator) vous devez ajouter ce script au début du script Powershell ci-dessous. Ce script permet d’exécuter le code Powershell.
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) { if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) { $CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine Exit } }
La première étape est d'adapté le script Powershell suivant :
$server = 'IP ou Nom de votre serveur WSUS' $port = '8530' Write-Progress -Activity 'Getting WSUS server' $WSUSserver = Get-WsusServer -Name $server -PortNumber $port Write-Progress -Activity 'Getting approved updates, this may take a while...' -PercentComplete -1 $approvedupdates = Get-WsusUpdate -UpdateServer $WSUSserver -Approval AnyExceptDeclined -Status Any Write-Progress -Activity 'Retrieved updates' -PercentComplete 90 $i = 0 $superseded = $approvedupdates | ? {$_.Update.IsSuperseded -eq $true -and $_.ComputersNeedingThisUpdate -eq 0} $total = $superseded.count foreach ($update in $superseded) { Write-Progress -Activity 'Declining updates' -Status "$($update.Update.Title)" -PercentComplete (($i/$total) * 100) $update.Update.Decline() $i++ } Write-Host "Total declined updates: $total" -ForegroundColor Yellow Invoke-WsusServerCleanup -CleanupObsoleteUpdate -CleanupUnneededContentFiles -CompressUpdates -DeclineExpiredUpdates
Explication du Script Powershell
Vous devez modifier les variables suivantes :
- $server = le nom ou l'ip de votre serveur WSUS
- $port = si le port WSUS n'est pas le même
Le script se connecte au serveur WSUS puis va regarder Toutes les mises à jours (Acceptées ou Non) , il vérifie ensuite si certaines mises à jour sont remplacées (Superseded).
Si la mise à jour est remplacée alors il la refuse.
Enfin une fois que les mises à jour sont refusée il lance l'assistant de nettoyage en ligne de commande :
Invoke-WsusServerCleanup -CleanupObsoleteUpdate -CleanupUnneededContentFiles -CompressUpdates -DeclineExpiredUpdates
Une fois terminée le script vous affiche les mises à jour refusées et l'espace gagné grâce au nettoyage.
Maintenant nous allons programmer le script à l'aide d'une tache planifiée.
Importer la configuration de la tâche planifiée
Pour rendre les choses plus simple j'ai pré-configuré la tâche dans un fichier XML.
Vous devez donc vous rendre dans le planificateur de tâches
à droite faire importer :
vous devez ensuite aller chercher le fichier XML dans le dossier "Script"
La tâche est importée, elle se nomme PurgeWsus.
Vous pouvez l'éditer selon votre besoin.
Valider la tâche en saisissant un compte ayant des droits administrateur sur la machine ou le domaine.
Votre serveur devrait automatiquement se nettoyer chaque dimanche à 10H.
Vérifier tout de même que le volume du disque dur ne se remplisse pas !
La source du script a été trouvée sur cette page : https://gallery.technet.microsoft.com/scriptcenter/Cleanup-WSUS-server-4424c9d6
Bien évidemment il y a peut être mieux, n'hésitez pas à échanger dans le fil des commentaires.
Commentaires
Le 25 mars 2021 à 15 h 26 min, alain a dit :
merci pour ce tuto, une question. Ce script fonctionne-t-il sur un WSUS replica d'un autre ? ou faut-il supprimer la partie DeclineExpiredUpdates
par avance merci
Le 31 mars 2021 à 12 h 53 min, Tutos-Info a dit :
Bonjour, je n'ai pas fais de replica.
Pour moi il faudrait également appliquer le script sur le replica (en changeant le nom du serveur)
Le 2 février 2021 à 10 h 23 min, comando76 a dit :
bravo
tuto parfait , merci
Le 27 novembre 2020 à 11 h 26 min, seb a dit :
Hello, comme il n'y avait aucun commentaire! je voulais saluer votre travail!
Laisser un commentaire