Gérer WSUS en PowerShell

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

wsusps1

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"

wsusps2

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.

wsusps3

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

wsusps4

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

wsusps5

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.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5561.Voir tous les posts

6 thoughts on “Gérer WSUS en PowerShell

  • 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,

    Répondre
  • 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.

    Répondre
  • 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.

    Répondre
    • 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 !

      Répondre
  • 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?

    Répondre
  • 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.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.