Serveurs & Infrastructure

Comment Nettoyer Votre Serveur WSUS Automatiquement

Par Tutos-Info, le 23 décembre 2019, mis à jour le 22 mai 2020 - wsus
logo microsoft

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.

Rappel sur la maintenance d'un serveur WSUS

Rappelez-vous , nous classons les mises à jour par type de remplacement. 

icone remplacement wsus 

Une fois identifiées nous les refusons, puis nous utilisons l'assistant de nettoyage.

Assistant Nettoyage Wsus
Faire Suivant, Suivant et la suppression des mises à jour refuser démarre.

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.

Un serveur WSUS plein ne télécharge plus les mises à jour !

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

planificateur de tâches Windows 10

à droite faire importer :

importer une tâche planifiée

vous devez ensuite aller chercher le fichier XML dans le dossier "Script"

importer purgewsus.xml

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.

Veuillez vérifier que la case « Executer même si l’utilisateur est déconnecté » soit bien cochée !

executer tâche utilisateur non connecté

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.

Tutos-Info

Commentaires

Le 27 novembre 2020 à 11 h 26 min, seb a dit :

Hello, comme il n'y avait aucun commentaire! je voulais saluer votre travail!

Votre réponse sera révisée par les administrateurs si besoin.

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.