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.
Sommaire
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 |
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" }
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.
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 :
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 :
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.
- 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.