15/11/2024

Gérer un serveur WSUS avec PowerShell

Ce chapitre s’intéresse à la gestion d’un serveur WSUS à partir de commandes PowerShell et quelques utilitaires natifs, grâce à quelques exemples que vous pourrez réutiliser et adapter à votre guise. Même si ce n’est pas indispensable compte tenu de la présence de la console WSUS et des scripts déjà existants sur Internet pour effectuer la maintenance de WSUS, ces commandes PowerShell sont à connaître.

I. Le module PowerShell « UpdateServices » pour WSUS

Pour interagir avec le serveur WSUS à partir de PowerShell, Microsoft propose un module nommé « UpdateServices » compatible avec Windows PowerShell 5.1 et PowerShell 6. À ce jour, ce module n’est pas compatible avec PowerShell 7, mais cela n’empêche pas de l’utiliser avec une console Windows PowerShell.

A. Les différentes commandes du module UpdateServices

Ce module PowerShell intègre 16 commandes différentes dont voici la liste :

Nom de la commande Description
Add-WsusComputer Ajouter un client WSUS existant dans un groupe cible
Add-WsusDynamicCategory Ajouter une nouvelle catégorie dynamique
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-WsusDynamicCategory Lister les catégories dynamiques
Get-WsusProduct Afficher la liste des produits disponibles sur le serveur WSUS
Get-WsusServer Obtenir des informations depuis un serveur WSUS
Get-WsusUpdate Obtenir des informations sur les mises à jour intégrées au 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-WsusDynamicCategory Modifier une catégorie dynamique
Set-WsusProduct Activer ou désactiver la synchronisation pour un produit
Set-WsusServerSynchronization Définir les paramètres de synchronisation

Commandes PowerShell du module UpdateServices (WSUS)

B. Récupérer des informations sur les ordinateurs

Le cmdlet « Get-WsusComputer » sert à lister les ordinateurs (postes de travail et serveurs) enregistrés auprès du serveur WSUS. Sans filtre, cette commande retourne la liste de toutes les machines gérées par le serveur WSUS.

Get-WsusComputer

Ensuite, il est possible d’ajouter des filtres pour récupérer tous les ordinateurs d’un groupe spécifique ou avec un statut spécifique.

  • Récupérer la liste de tous les ordinateurs avec le statut « Échec ou nécessaire »
Get-WsusComputer -ComputerUpdateStatus FailedOrNeeded
  • Récupérer la liste de tous les ordinateurs dont le nom contient « PC »
Get-WsusComputer -NameIncludes PC
  • Récupérer la liste de tous les ordinateurs du groupe « Serveurs »
Get-WsusComputer -ComputerTargetGroups "Serveurs"
  • Récupérer la liste des ordinateurs qui ont émis un rapport entre le 01/08 et le 04/08/2022
Get-WsusComputer -FromLastReportedStatusTime 01/08/2022 -ToLastReportedStatusTime 04/08/2022
  • Récupérer la liste de tous les ordinateurs « Windows 10 Pro »

En utilisant nos propres filtres, nous pouvons aller plus loin. Par exemple, récupérer la liste de tous les ordinateurs enregistrés dans WSUS et qui tournent sur Windows 10 Pro :

Get-WsusComputer | Where{ $_.OSDescription -eq "Windows 10 Pro" }

Get-WsusComputer - Exemples

C. Approuver ou refuser une mise à jour

Avant de chercher à approuver ou refuser une mise à jour, nous allons afficher la liste des mises à jour disponible avec la commande suivante :

Get-WsusUpdate

Ce résultat peut être affiné pour lister les mises à jour avec l’état « Échec ou nécessaire ». Si cette liste retourne une ou plusieurs mises à jour, il y a des chances que ce soit des mises à jour en attente d’approbation.

Get-WsusUpdate -Status FailedOrNeeded

Si l’on compare les résultats de cette commande et l’affichage dans la console, ils sont cohérents.

Get-WsusUpdate - Exemple

Pour lister uniquement les mises à jour non approuvées avec le statut « Échec ou nécessaire » :

Get-WsusUpdate -Status FailedOrNeeded -Approval Unapproved

Ainsi, on peut approuver la mise à jour avec cette commande :

Get-WsusUpdate -Status FailedOrNeeded -Approval Unapproved | Approve-WsusUpdate -Action Install -TargetGroupName "Tous les ordinateurs"

Dans cet exemple, on approuve la mise à jour pour l’installation, pour tous les ordinateurs, car on cible le groupe « Tous les ordinateurs ». Le refus d’une mise à jour fonctionne sur le même principe, sauf que l’on utilise la commande « Deny-WsusUpdate » à la place de « Approve-WsusUpdate ».

Si vous souhaitez vous intéresser aux mises à jour critiques non approuvées, car elles représentent un risque particulier, vous pouvez utiliser cette commande :

Get-WsusUpdate -Classification Critical -Approval Unapproved -Status Any

Avec ces différentes commandes, vous pouvez envisager de créer vos propres fonctions d’analyse et de reporting WSUS !

II. Se connecter à l’API WSUS

Le site WSUS qui est inclus dans IIS intègre une API (« ApiRemoting30 ») qui permet d’interagir directement avec le serveur WSUS. C’est un accès intéressant pour vos futurs développements et qui permet d’aller plus loin que les commandes PowerShell évoquées précédemment.

La connexion à l’API s’effectue grâce à ce morceau de code PowerShell où il suffit d’indiquer le nom de son serveur, le numéro de port et d’indiquer s’il faut utiliser ou non le SSL.

[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$WSUSServer = 'WSUS'
# This is your WSUS Server Name
$Port = 8530
# This is 8531 when SSL is enabled
$UseSSL = $False
#This is $True when SSL is enabled
Try
{
    $Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer($WSUSServer,$UseSSL,$Port)
}
Catch
{
    Write-Warning "$($WSUSServer)<$($Port)>: $($_)"
    Break
}

Cet extrait PowerShell est disponible sur le site de Microsoft : Code PowerShell

À partir du moment où la connexion est établie, la lecture de la variable $Wsus va afficher diverses informations au sujet du serveur WSUS, telle que la version.

Voici un exemple :

API WSUS - Connexion

Ensuite, de nombreuses propriétés et méthodes sont accessibles. La liste complète est consultable avec la commande suivante :

$wsus | Get-Member

Par exemple, on peut récupérer des informations précises sur l’ordinateur nommé « PC-03 » :

$wsus.GetComputerTargetByName("PC-03")

Voici un exemple :

API WSUS - Informations sur un ordinateur

III. Les utilitaires WSUSutil, wuauclt, et USOclient

Pour gérer le service WSUS sur le serveur ayant ce rôle et le service Windows Update de Windows sur les postes de travail et serveurs, il existe différents outils que je souhaitais évoquer dans ce chapitre.

A. L’utilitaire WSUSutil

L’utilitaire WSUSutil est inclus avec le rôle WSUS et cet exécutable est stocké dans le répertoire « C:\Program Files\Update Services\Tools » du serveur WSUS. Il est très pratique pour les migrations de serveurs WSUS ou pour le dépannage avancé, par exemple lorsqu’il y a besoin de réinitialiser la base de données sans pour autant réinstaller le serveur.

cd "C:\Program Files\Update Services\Tools"

Voici quelques exemples :

  • Vérifier l’état de santé du serveur WSUS
.\WsusUtil.exe checkhealth

Cette commande génère un événement dans le journal « Application » du serveur WSUS.

Exemple utilisation wsusutil

  • Lister les serveurs principaux « frontend »
.\WsusUtil.exe listfrontendservers

Cette commande sert à visualiser le(s) serveur(s) maître(s). Dans notre cas, le serveur est seul et il est serveur principal par définition :

Serveur : SRV-WSUS.it-connect.local, IsActive :True, IsMaster :True

  • Déplacer les données de WSUS vers un autre emplacement

Avec cet utilitaire, vous pouvez déplacer les données de WSUS vers un nouvel emplacement grâce à l’option « movecontent ». Dans l’exemple ci-dessous, on déplace les données vers « W:\WSUS\WSUSContent » et cette opération sera journalisée dans le fichier « C:\WSUS_Move.log ».

.\WsusUtil.exe movecontent W:\WSUS\WSUSContent  C:\WSUS_Move.log

L’option « -skipcopy » peut être ajoutée pour définir un nouvel emplacement sans copier les données. Cette méthode ne convient pas lorsque l’on utilise une base SQL Server.

.\WsusUtil.exe movecontent W:\WSUS\WSUSContent  C:\WSUS_Move.log -skipcopy

B. Les utilitaires wuauclt et USOclient

Que ce soit pour les versions desktop ou server, il existe différents utilitaires, notamment WUAUCLT et USOClient. Si vous utilisez les systèmes Windows depuis plusieurs années, il y a des chances que le premier nom vous parle. Le second est un peu plus méconnu.

En fait, WUAUCLT est un outil intégré à Windows, mais qui ne fonctionne plus sur les versions de Windows, à partir de Windows 10 et Windows Server 2016. Cette information est disponible dans la documentation de Microsoft :

« La commande wuauclt.exe /detectnow a été supprimée et n’est plus prise en charge. Pour déclencher une analyse des mises à jour, exécutez les commandes PowerShell suivantes : 

$AutoUpdates = New-Object -ComObject "Microsoft.Update.AutoUpdate"

$AutoUpdates.DetectNow()»

C’est dommage, car cet utilitaire était très pratique. Par exemple, il permettait de lancer une recherche de mise à jour en ligne de commande grâce à la commande mentionnée par Microsoft.

En revanche, il est remplacé par un autre utilitaire baptisé « USOclient.exe » qui dispose de diverses options pour démarrer une recherche de mises à jour, démarrer le téléchargement ou encore lancer l’installation des updates.

USOclient.exe startscan
USOclient.exe RefreshSettings StartScan StartDownload StartInstall

Dans le prochain chapitre, nous allons continuer à explorer la ligne de commande, mais cette fois-ci pour gérer le service Windows Update en lui-même, c’est-à-dire la partie cliente.

eBook WSUS sur Windows Server 2022

author avatar
Florian BURNEL Co-founder of IT-Connect
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.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

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.