logo rss

Récupérer les versions Windows des ordinateurs d'un domaine

PowerShell logo

Introduction

Initiallement, il était possible via la console WSUS de voir la version Windows de toutes les machines gérées, mais depuis Windows 10 il semble que cela ne fonctionne plus très bien.

J'ai donc travaillé sur la possibilité de récupérer ces informations via un script PowerShell dans le but d'extraire pour chaque ordinateur d'un domaine la version exacte de Windows.

Le but de cet article est donc de voir comment lister dans un fichier csv la version windows d'ordinateurs.

Mise à jour : J'ai d'abord trouvé une solution basée sur WinRM, mais ai finalement trouvé une solution plus simple en utilisant la commande Get-ADComputer. Je laisse l'option WinRM car elle peut être utilisée pour d'autres besoins.

Avec la commande Get-ADComputer (Nouveau)

  • Récupérer la version Windows de tous les ordinateurs du domaine et exporter les informations dans un fichier csv C:\OS_Version_List.csv :
PS C:\ > Get-ADComputer -Filter '*' -Property * | Select-Object Name,OperatingSystem,OperatingSystemVersion | Export-Csv -Path C:\OS_Version_List.csv
  • Afficher la version de windows pour tous les ordinateurs qui ne sont pas désactivés :
PS C:\ > Get-ADComputer -Filter {(Enabled -eq $True)} -Property * | Select-Object Name,OperatingSystem,OperatingSystemVersion -Wrap -Autosize
  • Afficher la version de windows pour tous les ordinateurs activés, dont le nom commence par PC0 et dont le système d'exploitation commence par Windows 7 :
PS C:\ > Get-ADComputer -Filter 'Name -Like "PC0*" -and Enabled -eq $True' -Property * | Where-Object { $_.OperatingSystem -like "Windows 7*" } | Select-Object Name,OperatingSystem,OperatingSystemVersion -Wrap -Autosize
  • Afficher la version de Windows pour tous les ordinateurs activés, qui sont connectés depuis 120 jours maximum et dont le nom commence par PC0 :
PS C:\ > Get-ADComputer -Filter {(Enabled -eq $True) -and (Name -Like "PC0*")} -Properties * | where { ($(Get-Date)-[DateTime]::FromFileTime($_.LastLogonTimeStamp)).Days -lt 120 } | Select-object Name,OperatingSystem,OperatingSystemVersion

Prérequis

J'utiliserai Windows Remote Management donc nous allons avoir besoin de l'activer sur chaque poste dont on veut récupérer la version de l'OS. Nous pouvons le faire par GPO.

Diagramme montrant comment récupérer la version Windows des ordinateurs du domaine à l'aide de WinRM et de commandes PowerShell via TCP 5986.
Récupérer les versions Windows depuis un serveur AD via WinRM

Activer WinRM via une GPO

Note : La GPO devra s'appliquer aux objets de type ordinateurs pour pouvoir être appliquée.
  • Depuis l'éditeur de GPO, aller dans Configuration Ordinateur > Préférences > Paramètres du Panneau de configuration > Services et créer un nouveau service :

Capture d'écran de l'éditeur de gestion de stratégie de groupe montrant les étapes de création d'un nouveau service pour activer WinRM sous Configuration de l'ordinateur.
  • Sélectionner Gestion à distance de Windows (Gestion WSM) et cliquer sur Sélectionner :
Boîte de dialogue de l'éditeur de stratégie de groupe montrant la sélection du service Windows Remote Management (WS-Management) pour la configuration.
  • Sélectionner les paramètres et cliquer sur OK :

Boîte de dialogue de l'éditeur de stratégie de groupe montrant la configuration du service WinRM avec démarrage automatique et action de démarrage du service.
  • Aller dans Configuration Ordinateur > Stratégies > Modèles d'administration > Composants Windows > Gestion à distance de Windows (WinRM) > Service WinRM et éditer Autoriser la gestion de serveurs à distance via WinRM :
L'éditeur de stratégie de groupe montre l'option permettant d'autoriser la gestion du serveur à distance via WinRM, l'option Modifier étant mise en surbrillance.
  • Activer et paramétrer la règle puis cliquer sur OK :
Boîte de dialogue des paramètres de stratégie de groupe montrant la configuration pour permettre la gestion à distance via WinRM avec les filtres IPv4 et IPv6 définis pour autoriser toutes les adresses.

Autoriser WinRM dans le firewall

WinRM utilise les ports TCP 5985 (HTTP) et 5986 (HTTPS), donc ils doivent être ouvert sur les ordinateurs cibles.

Normalement dans un environnement Active Directory les connexions non chiffrées (5985 (HTTP)) sont désactivées. On pourra vérifier avec la commande suivante :

PS C:\ > winrm get winrm/config/service

Vérifier la connectivité WinRM

  • Vérifier l'état du service WinRM (au niveau de la source et destination) :
PS C:\ > (Get-Service WinRM).Status
  • Depuis un Contrôleur de Domaine exécuter cette commande pour voir si on peut récupérer la Version de l'OS, exemple ici avec PC01 :
PS C:\ > Invoke-Command -ScriptBlock { [System.Environment]::OSVersion.Version } -ComputerName PC01 | Select-Object PSComputerName,Build Sortie de la commande PowerShell montrant l'exécution de la commande Invoke-Command pour récupérer la version du système d'exploitation et le numéro de compilation d'un ordinateur distant.

Script vers fichier csv

J'ai écris un petit script qui teste que les ordinateurs (du PC0001 au PC0400) sont joignables, si c'est le cas il essaiera de récupérer la version de l'OS via WinRM. Le résultat sera écrit dans un fichier C:\OS_Version_List.csv.

#Test for PC0001 to PC0400 1..400 | foreach { $i="{0:D4}" -f $_ $ping = ping -n 1 "PC$i"| findstr "TTL" if ($LASTEXITCODE -eq "0") { $ip = $PING -replace ".* ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*",'$1' Write-Host "PC$i is up" Try { Invoke-Command -ScriptBlock { [System.Environment]::OSVersion.Version } -ComputerName "PC$i" -ErrorAction Stop | Select-Object PSComputerName,Build,@{Name="IP";Expression={"$ip"}} | Export-Csv -Path C:\OS_Version_List.csv -Append } Catch { '' | Select-Object @{Name="PSComputerName"; Expression={"PC$i"}},@{Name="Build"; Expression={"UNKNOWN"}},@{Name="IP";Expression={"$ip"}} | Export-Csv -Path C:\OS_Version_List.csv -Append } } else { Write-Host "PC$i is not available" } }
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact