Home  News


Comment obtenir le nombre d'ordinateurs par système d'exploitation Windows dans un domaine Active Directory en utilisant Powershell (FR)

Dans un domaine Active Directory, les détails sur la version d'un système d'exploitation sont stockés dans deux attributs sur les comptes d'ordinateurs :

  • operatingsystem :Cet attribut stocke le nom du système d'exploitation (exemple : Windows Server 2012 R2 Datacenter)
  • operatingsystemversion :Cet attribut stocke la version du système d'exploitation (exemple : 6.3 (9600))
     


 

    Operating system

Version number

Windows8.1

6.3*

Windows Server2012R2

6.3*

Windows8

6.2

Windows Server2012

6.2

Windows7

6.1

Windows Server2008R2

6.1

Windows Server2008

6.0

WindowsVista

6.0

Windows Server2003R2

5.2

Windows Server2003

5.2

WindowsXP 64-Bit Edition

5.2

WindowsXP

5.1

Windows2000

5.0

Operating System Version: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx

Si vous avez besoin d'obtenir le nombre d'ordinateurs par système d'exploitation Windows dans votre domaine Active Directory, vous pouvez effectuer cette opération en utilisant des requêtes LDAP sur votre Active Directory.

Le script Powershell suivant permet la satisfaction de ce besoin :

=============================================================================

cls

 

$tableOSName = "OperatingSystems"

$tableOS = New-Object system.Data.DataTable “$tableOSName”

$colOS = New-Object system.Data.DataColumn OperatingSystem,([string])

$colOSversion = New-Object system.Data.DataColumn OperatingSystemVersion,([string])

$colOSType = New-Object system.Data.DataColumn OperatingSystemType,([string])

$tableOS.columns.add($colOS)

$tableOS.columns.add($colOSversion)

$tableOS.columns.add($colOSType)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 8.1"

$rowtableOS.OperatingSystemVersion = "6.3"

$rowtableOS.OperatingSystemType = "WorkStation"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 8"

$rowtableOS.OperatingSystemVersion = "6.2"

$rowtableOS.OperatingSystemType = "WorkStation"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 7"

$rowtableOS.OperatingSystemVersion = "6.1"

$rowtableOS.OperatingSystemType = "WorkStation"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows Vista"

$rowtableOS.OperatingSystemType = "WorkStation"

$rowtableOS.OperatingSystemVersion = "6.0"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows XP 64-Bit Edition"

$rowtableOS.OperatingSystemVersion = "5.2"

$rowtableOS.OperatingSystemType = "WorkStation"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows XP"

$rowtableOS.OperatingSystemVersion = "5.1"

$rowtableOS.OperatingSystemType = "WorkStation"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 2000 Professional"

$rowtableOS.OperatingSystemVersion = "5.0"

$rowtableOS.OperatingSystemType = "WorkStation"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows Server 2012 R2"

$rowtableOS.OperatingSystemVersion = "6.3"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows Server 2012"

$rowtableOS.OperatingSystemVersion = "6.2"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows Server 2008 R2"

$rowtableOS.OperatingSystemVersion = "6.1"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows Server® 2008"

$rowtableOS.OperatingSystemVersion = "6.0"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows Server 2003"

$rowtableOS.OperatingSystemVersion = "5.2"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 2000 Server"

$rowtableOS.OperatingSystemVersion = "5.0"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 2000 Advanced Server"

$rowtableOS.OperatingSystemVersion = "5.0"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

$rowtableOS = $tableOS.NewRow()

$rowtableOS.OperatingSystem = "Windows 2000 Datacenter Server"

$rowtableOS.OperatingSystemVersion = "5.0"

$rowtableOS.OperatingSystemType = "Server"

$tableOS.Rows.Add($rowtableOS)

 

write-host "WorkStation Operating Systems : " -foregroundcolor "Green"

 

$WorkStationCount = 0

foreach ($object in ($tableOS | where {$_.OperatingSystemType -eq 'WorkStation'}))

{

      $LDAPFilter = "(&(operatingsystem=" + $object.OperatingSystem + "*)(operatingsystemversion=" + $object.OperatingSystemVersion + "*))"

      $OSCount = (Get-ADComputer -LDAPFilter $LDAPFilter).Count

      if ($OSCount -ne $null)

      {

            "" + $object.OperatingSystem  + ": " + $OSCount + ""

      }

      else

      {

            "" + $object.OperatingSystem  + ": 0"

            $OSCount = 0

      }

      $WorkStationCount += $OSCount

}

$WorkStationTotalNumber = "Total Number : " + $WorkStationCount + ""

write-host $WorkStationTotalNumber -foregroundcolor "Yellow"

write-host ""

 

write-host "Server Operating Systems : " -foregroundcolor "Green"

 

$ServerCount = 0

foreach ($object in ($tableOS | where {$_.OperatingSystemType -eq 'Server'}))

{

      $LDAPFilter = "(&(operatingsystem=" + $object.OperatingSystem + "*)(operatingsystemversion=" + $object.OperatingSystemVersion + "*))"

      $OSCount = (Get-ADComputer -LDAPFilter $LDAPFilter).Count

      if ($OSCount -ne $null)

      {

            "" + $object.OperatingSystem  + ": " + $OSCount + ""

      }

      else

      {

            "" + $object.OperatingSystem  + ": 0"

            $OSCount = 0

      }

      $ServerCount += $OSCount

}

$ServerTotalNumber = "Total Number : " + $ServerCount + ""

write-host $ServerTotalNumber -foregroundcolor "Yellow"

write-host ""

 

$LDAPFilter = "(&(operatingsystem=*)"

foreach ($object in $tableOS)

{

      $LDAPFilter += "(!(&(operatingsystem=" + $object.OperatingSystem + "*)(operatingsystemversion=" + $object.OperatingSystemVersion + "*)))"

}

$LDAPFilter += ")"

$OthersCount = (Get-ADComputer -LDAPFilter $LDAPFilter).Count

$OthersTotalNumber = "Total Number : " + $OthersCount + ""

write-host "Other Operating Systems : " -foregroundcolor "Green"

write-host $OthersTotalNumber -foregroundcolor "Yellow"

=============================================================================



Lorsque vous exécutez ce script, vous aurez le nombre d'ordinateurs par système d'exploitation Windows affiché:


 


Vous trouverez également le nombre d'ordinateurs pour "Other Operating Systems".
 
Il s'agit principalement de :

  • Ordinateurs non-Windows
  • Ordinateurs Windows disposant des incohérences dans leurs attributsoperatingsystemet operatingsystemversion
  • Ordinateurs Windows qui exécutent les systèmes d'exploitation antérieures à Windows 2000

Comment fonctionne le script ?

Le script utilise une table qui comporte les colonnes suivantes :

  • OperatingSystem
  • OperatingSystemVersion
  • OperatingSystemType (Server ou WorkStation)


 

Pour chacune des lignes, le script crée le filtre LDAP suivant :

$LDAPFilter = "(&(operatingsystem=" + $object.OperatingSystem + "*)(operatingsystemversion=" + $object.OperatingSystemVersion + "*))"


$object.OperatingSystemest une variable qui contient la valeur du système d'exploitation sur la ligne et $object.OperatingSystemVersionest une variable qui contient la valeur de la Version du système d'exploitation de la ligne.Le filtre LDAP permet d'obtenir les comptes d'ordinateurs qui ont :

  • la valeur de l'attributOperatingSystemcommençant par la valeur $object.OperatingSystem
  • la valeur de l'attributoperatingsystemversion etcommençant par la valeur $object.OperatingSystemVersionvaleur

En utilisant la cmdletGet-ADComputeravec ce filtre LDAP, le script est en mesure d'obtenir la liste des ordinateurs par le système d'exploitation et de compter leur nombre.

Quant à "Other Operating Systems", le script utilise le filtre LDAP suivant :

  • L'attribut operatingsystem a une valeur
  • Et le compte ordinateur n'appartient à aucun des filtres LDAP mentionnés précédemment