Comment identifier les versions et les builds du système d’exploitation Windows dans Active Directory

Identifier les versions de Windows installées sur votre réseau peut s’avérer extrêmement fastidieux, surtout sans outils de gestion performants comme SCCM ou les solutions habituelles. De plus, la gestion d’une infrastructure hétérogène avec Windows 10, 11 et des versions antérieures complique encore davantage la situation. Heureusement, PowerShell est une solution idéale. Que vous gériez un domaine ou que vous exploriez simplement quelques appareils, il existe des méthodes pour collecter rapidement toutes ces informations de version. Attention cependant : il sera parfois nécessaire d’ajuster certaines commandes ou de vérifier les autorisations. Mais une fois configuré, PowerShell représente un gain de temps considérable pour le suivi des mises à jour et la détection des versions de système d’exploitation non prises en charge.

Comment trouver les versions et les builds de Windows sur votre réseau

Récupération d’informations locales à partir d’une seule machine

C’est la partie la plus simple : si vous souhaitez simplement connaître la version de Windows installée sur une machine spécifique, vous pouvez le faire directement depuis PowerShell. Exécutez les commandes suivantes :

  • Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild
  • Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

Ces commandes vous indiqueront le nom du produit (par exemple, Windows 10 Pro), l’identifiant de la version (par exemple, 21H2) et le numéro de build. Sur certains ordinateurs, la première commande peut échouer ou ne pas afficher tous les détails, sauf si vous exécutez PowerShell avec les privilèges d’administrateur. Un redémarrage rapide ou l’exécution de PowerShell en tant qu’administrateur peut parfois résoudre le problème.

Récupération d’informations provenant de plusieurs machines dans Active Directory

Si vous gérez un domaine et souhaitez voir les comptes existants, vous pouvez utiliser la cmdlet Get-ADComputer. Assurez-vous que le module Active Directory est installé sur votre machine (il fait partie des outils d’administration de serveur distant).Ensuite, exécutez :

Get-ADComputer -Filter {(Enabled -eq $True)} -Property * | Select-Object Name, OperatingSystem, OperatingSystemVersion

Ce script affiche la liste des ordinateurs actifs ainsi que les informations relatives à leur système d’exploitation. Il permet de détecter les versions obsolètes ou non prises en charge, notamment lors de la mise à jour ou du nettoyage du parc informatique. Petit conseil : supprimez régulièrement les comptes inactifs pour une meilleure organisation.

Conversion des numéros de build en étiquettes de version plus familières

Windows 10 et 11 utilisent des numéros de build qui ne correspondent pas aux libellés habituels, ce qui rend leur identification difficile au premier coup d’œil. Vous pouvez ajouter une fonction simple pour convertir ces numéros de build en noms tels que 21H1, 22H2, etc. Voici une fonction pratique : copiez-la dans votre session PowerShell :

function Convert-WindowsBuild { [CmdletBinding()] param( [string] $OperatingSystem, [string] $OperatingSystemVersion ) if (($OperatingSystem -like '*Windows 10*') -or ($OperatingSystem -like 'Windows 11*')) { $WinBuilds= @{ '10.0 (22621)' = "Windows 11 22H2"; '10.0 (19045)' = "Windows 10 22H2"; '10.0 (22000)' = "Windows 11 21H2"; '10.0 (19044)' = "Windows 10 21H2"; '10.0 (19043)' = "Windows 10 21H1"; '10.0 (19042)' = "Windows 10 20H2"; '10.0 (18362)' = "Windows 10 1903"; '10.0 (17763)' = "Windows 10 1809"; '10.0 (17134)' = "Windows 10 1803"; '10.0 (16299)' = "Windows 10 1709"; '10.0 (15063)' = "Windows 10 1703"; '10.0 (14393)' = "Windows 10 1607"; '10.0 (10586)' = "Windows 10 1511"; '10.0 (10240)' = "Windows 10 1507"; '10.0 (18898)'= 'Windows 10 Insider Preview' } $WinBuild= $WinBuilds[$OperatingSystemVersion] } else { $WinBuild = $OperatingSystem } if ($WinBuild) { $WinBuild } else { 'Unknown' } }

Cela permet d’y voir plus clair lorsqu’on analyse plusieurs machines différentes. Attention : il arrive que les données de compilation soient incomplètes ou que, si les informations sur le système d’exploitation ne sont pas standard, la mention « Inconnu » apparaisse. C’est normal ; ce n’est pas parfait, mais généralement suffisant.

Synthétiser toutes les informations dans un rapport

Si vous souhaitez obtenir un aperçu de l’environnement Windows de votre réseau (noms d’hôtes, adresses IP, versions et informations de dernière connexion), ce script est très pratique. Il extrait les données de tous les ordinateurs du domaine activés et les affiche de manière claire.

$Comps=Get-ADComputer -Filter {(Enabled -eq $True)} -Properties * $CompList=foreach ($Comp in $Comps) { [PSCustomObject] @{ Name = $Comp. Name; IPv4Address = $Comp. IPv4Address; OperatingSystem = $Comp. OperatingSystem; Build = Convert-WindowsBuild -OperatingSystem $Comp. OperatingSystem -OperatingSystemVersion $Comp. OperatingSystemVersion; LastLogonDate = $Comp. LastLogonDate } } $CompList | Out-GridView

Ou exportez-le dans un fichier CSV si vous souhaitez l’archiver ou l’analyser ultérieurement :

$CompList | Export-Csv -Path.\windows_version_report.csv -NoTypeInformation

Ainsi, vous obtenez un aperçu rapide des systèmes qui utilisent des versions obsolètes ou non prises en charge, et vous pouvez planifier en conséquence.

Obtenir des informations à distance sur les machines du groupe de travail

Toutes les machines ne font pas partie du domaine ; une solution consiste donc à interroger directement les ordinateurs distants : plus lent, mais plus flexible. Utilisez Invoke-Command si l’accès à distance PowerShell est activé sur ces machines.

Invoke-Command -ScriptBlock {Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild} -ComputerName wsk-w12b21 | Select-Object PSComputerName, ProductName, ReleaseID, CurrentBuild

Si vous disposez d’une liste d’ordinateurs dans un fichier texte, vous pouvez automatiser cette opération pour plusieurs machines simultanément :

Invoke-Command -ComputerName (Get-Content c:\ps\PC_list.txt) -ScriptBlock {Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, ReleaseID, CurrentBuild} | Select-Object PSComputerName, ProductName, ReleaseID, CurrentBuild

À noter : l’accès à distance PowerShell doit être activé et configuré sur toutes les machines cibles, ce qui n’est pas toujours simple dans les groupes de travail.

Pourquoi choisir cette voie ?

Franchement, c’est la méthode la plus simple pour voir ce qui tourne réellement sur votre réseau : pas besoin de se prendre la tête avec les filtres WMI ou le spam du navigateur, juste des scripts simples. Cela permet aussi d’identifier les versions obsolètes du système d’exploitation ou les builds non pris en charge avant qu’elles ne causent des problèmes plus importants par la suite. En plus, vous pouvez surveiller votre réseau sans le moindre effort.