PowerShell loves WMI – OS Info

#powershell edit this page

Mit dem cmdlet Get-WmiObject kann Windows PowerShell auf WMI Objekte zugreifen. Man kann also z.B. die Eigenschaften der Klasse “Win32_OperatingSystem” anzeigen und daraus Informationen über das Betriebssystem erhalten.

Die vollständige Liste der Eigenschaften (und Methoden) gibt es im MSDN. Oder natürlich mit folgendem Befehl:

Get-WmiObject -Class win32_OperatingSystem -Property * | select *

Interessante Eigenschaften

OperatingSystemSKU: Enthält die installierte Version des Betriebssystems, z.B. Ultimate, Enterprise, Datacenter Server Edition

ProductType: Workstation, Domain Controller, Server

BuildNumber: Enthält die Build Nummer des Betriebssystems

OSArchitecture: 32-Bit oder 64-Bit

Filter

Man kann aufgrund dieser Eigenschaften einfache Filter für Scripts erstellen und so z.B. sicherstellen dass ein bestimmtes Script nur auf einem bestimmten Betriebssystem ausgeführt wird.

#Variable OS erstellen, enthält alle Informationen der angegebenen Klasse</p>

$OS = Get-WMIObject –Class Win32_OperatingSystem

if($OS.OperatingSystemSKU -eq "4" -and $OS.Caption -like "*Windows 7*") {

#Code für Windows 7 Enterprise

} else {

#Code für jedes andere OS

}

if ($os.OSArchitecture -eq "64-bit"){

#Code für x64

} else {

#Code für x86

}</code>

Das sind natürlich sehr einfache Beispiele, wie mächtig WMI ist kann man sich am besten in der WMI Reference ansehen. Außerdem enthält das Beispiel keine Fehlerüberprüfung, läuft irgendwas schief, wars das.

Remote

Natürlich kann man auch Informationen über einen oder mehrere remote Computer auswerten. Das cmdlet Get-WmiObject hat den Parameter Computername über den man einen oder mehrere Computernamen (getrennt mit Komma) abfragen kann. Über Pipline Input kann man dem cmdlet Computernamen aus einem Textfile oder dem ActiveDirectory übergeben.

Get-WmiObject –Class win32_OperatingSystem –Computer mypc1,mypc2</p>

Get-ADComputer -Filter 'Name -like "*Server*"'| Get-WmiObject –Class win32_OperatingSystem</code>

 

so long,

tom