Gérer WSUS en PowerShell
Sommaire
I. Présentation
Après avoir vu la configuration de WSUS via l'interface graphique dans les autres tutoriels, nous allons nous intéresser à la gestion du service via PowerShell. WSUS bénéficie en effet de plusieurs commandlets qui lui sont dédiés afin de faciliter la gestion par script notamment, ou l'utilisation en mode Core du service.
II. WSUS et PowerShell
Afin de visualiser les commandlets WSUS disponibles sur votre machine, utilisez la commande suivante :
Get-Command *wsus*
En fait, on recherche toutes les commandes contenant le terme "wsus".
Avant de passer à l'utilisation de ces commandlets, je vous ai concocté un tableau récapitulatif :
Add-WsusComputer |
Ajouter un client WSUS existant dans un groupe cible |
Approve-WsusUpdate |
Approuver une mise à jour pour qu’elle soit appliquée aux clients |
Deny-WsusUpdate |
Refuser le déploiement d’une mise à jour |
Get-WsusClassification |
Afficher les classifications disponibles sur le serveur WSUS |
Get-WsusComputer |
Afficher la liste des clients WSUS |
Get-WsusProduct |
Afficher la liste des produits disponibles sur le serveur WSUS |
Invoke-WsusServerCleanup |
Effectuer un processus de nettoyage sur le serveur WSUS |
Set-WsusClassification |
Activer ou désactiver la synchronisation pour une classification de mises à jour |
Set-WsusProduct |
Activer ou désactiver la synchronisation pour un produit |
Set-WsusServerSynchronization |
Définir les paramètres de synchronisation |
Get-WsusServer |
Obtenir des informations depuis un serveur WSUS |
Nous verrons l'ensemble de ces commandlets plus ou moins en détails, certains d'entre eux ne seront pas détaillés mais quand même utilisés en complément des autres.
III. Add-WsusComputer
Commençons par le commencement, prenons l'exemple d'une machine cliente WSUS nommée "cli01.it-connect.fr" située dans le groupe "Clients Windows 7" que l'on déplacera dans le groupe "Clients Windows 8.1" suite à une mise à jour de l'OS.
Pour récupérer le nom de l'ordinateur, il faut passer par l'utilisation au préalable de "Get-WsusComputer" suivit d'un pipe (|) et de Add-WsusComputer. On concatène les deux commandes en fait. Voici la commande dans le cas de l'exemple évoqué ci-dessus :
Get-WsusComputer -Name cli01.it-connect.fr | Add-WsusComputer -TargetGroupeName "Clients Windows 8.1"
J'en profite pour vous donner une ligne de commande qui permet de changer de groupe tous les clients WSUS qui utilisent un système d'exploitation précis. Par exemple, déplacer dans le groupe "Clients Windows 8.1" tous les clients qui exécutent Windows 8.1 comme OS :
Get-WsusComputer | Where{ $_.OSDescription -eq "Windows 8.1" } | Add-WsusComputer -TargetGroupName "Clients Windows 8.1" -Verbose
Pour afficher les premiers (First) ou les derniers (Last) résultats, on ajoutera un pipe suivit de Select-Object, comme ceci :
Get-WsusComputer | Select-Object -First n # Ou Get-WsusComputer | Select-Object -Last n
Remplacez "n" par le nombre de résultat à afficher.
IV. Approve-WsusUpdate et Deny-WsusUpdate
Comme dit précédemment, le commandlet Approve-WsusUpdate permet d'approuver une mise à jour afin qu'elle soit appliquée aux postes clients WSUS. Mais pas seulement, puisque l'on peut approuver la mise à jour (ce qui implique l'installation), mais aussi la désapprouver et la désinstaller. Cela se gérera par le paramètre Action de la commande.
Nous utiliserons la concaténation de deux commandlets pour approuver une mise à jour ou un ensemble de mise à jour : Get-WsusUpdate et Approve-WsusUpdate.
Pour approuver une mise à jour précise, son ID doit être connu puisque l'on ne peut pas indiquer directement de nom (propriété UpdateID).
En général, on utilisera plutôt ce genre de commande pour approuver un ensemble de mise à jour, comme par exemple toutes les mises à jour de sécurité actuellement non approuvé pour les clients du groupe "Clients Windows 8.1" :
Get-WsusUpdate -Classification Security -Approval Unapproved | Approve-WsusUpdate -Action Install -TargetGroupName "Clients Windows 8.1"
Quant à Deny-WsusUpdate, il fonctionne de la même façon c'est à dire que l'on doit concaténer l'utilisation de Get-WsusUpdate et Deny-WsusUpdate. Sauf que dans ce cas plutôt de gérer l'approbation d'une mise à jour, on peut empêcher/refuser le déploiement de mises à jour.
V. Get-WsusClassification
La mention "Get" présente en début de ce commandlet indique qu'il ne sert qu'à obtenir des informations, et, dans le cas présent à obtenir les classifications de mises à jour disponible sur votre serveur WSUS.
Si vous effectuez la commande depuis le serveur en local :
Get-WsusClassification
Par contre, si vous souhaitez effectuer l'action à distance il faudra préciser le serveur grâce à Get-WsusServer au préalable puis faire un piping avec Get-WsusClassification. Comme ceci (exemple avec un serveur WSUS nommé SRV01 et accessible sur le port 8530) :
Get-WsusServer -Name SRV01 -PortNumber 8530 | Get-WsusClassification
VI. Invoke-WsusServerCleanup
Ce commandlet est intéressant puisqu'il permet de nettoyer son serveur WSUS, grâce à lui on peut donc imaginer une tâche planifiée qui effectue le nettoyage régulièrement.
Plusieurs types de nettoyage sont disponibles :
- CleanupObsoleteComputers : Supprimer les ordinateurs clients obsolètes de la base de données
- CleanupObsoleteUpdates : Supprimer les mises à jour obsolètes de la base de données
- CleanupUnneededContentFiles : Supprimer les fichiers de mise à jour inutilisés
- CompressUpdates : Supprimer de la base de données les fichiers de mise à jour inutilisés (allégement de la base)
- DeclineExpiredUpdates : Décliner les mises à jour expirées
Pour utiliser une de ces options, faites comme ceci :
Invoke-WsusServerCleanup -CleanupObsoleteUpdates
VII. Set-WsusClassification
Pour activer la classification sur votre serveur WSUS, utilisez cette commande (exemple avec la classification Application) :
Get-WsusClassification | Where {$_.Classification.Title -eq "Application" } | Set-WsusClassification
Vous remarquerez une nouvelle fois la concaténation de deux commandlets : Get-WsusClassification et Set-WsusClassification.
A l'inverse, pour désactiver une classification de mises à jour on ajoutera une option :
Get-WsusClassification | Where {$_.Classification.Title -eq "Application" } | Set-WsusClassification -Disable
VIII. Set-WsusServerSynchronization
Vous pouvez utiliser ce commandlet pour préciser un serveur de mise à jour WSUS en amont à utiliser pour télécharger les mises à jour, ou, pour indiquer que les mises à jours doivent être téléchargées directement sur les serveurs Microsoft Update.
Pour indiquer que l'on souhaite utiliser les serveurs Microsoft Update on utilisera :
Set-WsusServerSynchronization -SyncFromMU
Si le serveur WSUS source est en amont :
Set-WsusServerSynchronization -UssServerName <nom-serveur>
Nous avons vu un bon aperçu de l'utilisation des commandlets PowerShell avec WSUS, si vous rencontrez un problème ou désirez plus d'informations, je vous invite à utiliser le forum.
Rectification pour la commande Add-WsusComputer :
Elle ne déplace pas les postes dans un autre groupe mais « ajoute » c’est à dire que après avoir lancé cette commande :
« Get-WsusComputer | Where{ $_.OSDescription -eq « Windows 8.1 » } | Add-WsusComputer -TargetGroupName « Clients Windows 8.1″ -Verbose »
Le poste sera dans le groupe Windows 7 et le groupe Windows 8 et je n’ai trouvé aucune solution en Powershell pour palier à ce problème ..
Cordialement,
Bonjour,
merci pour toutes ces explications sur les différentes commandes permettant la gestion de wsus avec powershell. je voudrais savoir s’il y avait une commande permettant d’exporter les données relatives aux groupes d’ordinateurs , par l’exemple, le groupe d’appartenance, les mises à jour installées…etc dans un fichier (xls, csv,…) et les réimporter en cas de problème.
cordialement.
Bonjour,
J’ai le même soucis que adminsystem, je souhaiterais avoir un script permettant l’export de toutes les propriétés des groupes d’ordinateurs créés sur ma console WSUS pour pouvoir les réimporter en cas de problème.
merci d’avance.
S’il y a beaucoup de machines, et q’il s’agit d’un travail fastitueux, alors tu peux éventuellement passer par des GPO par groupes d’ordi, en forçant la target !
Bonjour,
Je suis à la recherche d’un script powershell me permettant d’identifier si une liste de KB est déjà téléchargée sur un WSUS ou pas. Pourriez-vous m’aider?
Bonjour,
J’espère que vous allez bien ! Je suis un fan d’ <>
Cependant, je souhaiterais savoir si vous pouviez m’aider à résoudre 3 problèmes, svp :
1- Echec de téléchargement des mises à jours avec le code d’erreur : « 0x80244007 » qui se transforme en code « 0x80244010 » après avoir exécuté les commandes suivantes.
Ces erreurs actuellement courantes sur de nombreux autres serveurs (OS : Windows Server 2019 Standard Version 17763.4851 Build 1809) & (OS : Windows Server 2022 standard Build 10.0.20348.681 ; 10.0.20348.1850 ; 10.0.20348.1906 ; 10.0.20348.2031).
2- Echec de téléchargement des mises à jours avec le code d’erreur : « 0x80244017 ».
3- Echec de la synchronisation entre un serveur WSUS local et un serveur WSUS central, sans code d’erreur, mais avec le message suivant d’erreur : « Connection Error »
<>
En vous remerciant par avance, je vous souhaite une excellente journée.