Zum Hauptinhalt springen

Get-WmiObject

Um die WMI-Datenbank per Powershell abzufragen, kann man Get-WmiObject verwenden. Seit Powershell 4 stehen außerdem die Cmdlets Get-CimClass und Get-CimInstance zur Verfügung, die im Prinzip das gleiche machen wie Get-WmiObject, aber speziell im Bereich Remoteabfragen ein paar zusätzliche Funktionen bieten. Die neuen CIM-Cmdlets lösen das alte Cmdlet Get-WmiObject ab, der ab Powershell 6 nicht mehr vorhanden ist. 

Um sich mit Get-WmiObject die verfügbaren Klassen des CIMV2-Namespace anzeigen zu lassen, ver-wenden man den Parameter -list:

Get-WMIObject -List

> NameSpace: ROOT\cimv2
> Name             Methods    Properties
> ----             -------    ----------
> __SystemClass    {}         {}
> __thisNAMESPACE  {}         {SECURITY_DESCRIPTOR}
> __Provider       {}         {Name}
> __Win32Provider  {}         {ClientLoadableCLSID,

Get-WMIObject -List Win32*

> NameSpace: ROOT\cimv2
> Name                                  Methods      Properties
> ----                                  -------      ----------
> Win32_DeviceChangeEvent               {}           {EventType,…
> Win32_SystemConfigurationChangeE...   {}           {EventType,…
> Win32_VolumeChangeEvent               {}           {DriveName,…
> Win32_SystemTrace                     {}           {SECURITY_DESCRIPTOR,…
> Win32_ProcessTrace                    {}           {ParentProcessID,…
> [...]

Um einen anderen Namespace abzufragen, kann der Parameter Namespace genutzt werden:

Get-WmiObject -List -Namespace ROOT\Virtualization

Der Virtualization-Namespace stellt beispielsweise zusätzliche Klassen zum Steuern von Hyper-V bereit. 

Die Eigenschaften der Klasse erhält man mit dem Parameter -Class:

Get-WmiObject -Class Win32_Computersystem
> Domain              : WORKGROUP 
> Manufacturer        : Microsoft Corporation 
> Model               : Virtual Machine
> Name                : DESKTOP-01UULH5
> PrimaryOwnerName    : student 
> TotalPhysicalMemory : 2146299904

Get-WmiObject liefert ein Objekt zurück. Das Objekt zeigt dank des ETS wieder nur einen Teil der Eigenschaften der Instanz an. Man kann wie üblich Select-Object benutzen, um alle Eigenschaften in der Konsole sichtbar zu machen:

Get-WmiObject -Class Win32_Computersystem | Select-Object -Property *

> PSComputerName         : DESKTOP-01UULH5
> AdminPasswordStatus    : 3
> BootupState            : Normal boot
> ChassisBootupState     : 3
> KeyboardPasswordStatus : 3
> PowerOnPasswordStatus  : 3
…

Mit dem Parameter -Computername können Abfragen auch Remote ausgeführt werden:

$cred = Get-Credential
Get-WmiObject -Class Win32_Computersystem -ComputerName DC1 -Credential $Cred

> Domain              : bitweise.de 
> Manufacturer        : Microsoft Corporation 
> Model               : Virtual Machine
> Name                : DC1
> PrimaryOwnerName    : 
> TotalPhysicalMemory : 2146349056

Der Parameter -Credential erlaubt es, andere Anmeldeinformationen zu verwenden. Grundsätzlich ist das aber nur notwendig, wenn das verwendete Benutzerkonto keine Administrator-Rechte auf dem Zielsystem hat, da die Anmeldeinformationen ansonsten per Single Sign On durchgeschleift werden.

Um mehrere Klassen mit Get-WmiObject Remote abzufragen, können mehrere Abfragen nacheinander initiieren werden. Dabei wird jedes Mal eine neue Anmeldung durchgeführt:

$cred = Get-Credential
Get-WmiObject -Class Win32_Computersystem -ComputerName DC1 -Credential $Cred
Get-WmiObject -Class Win32_Operatingsystem -ComputerName DC1 -Credential $Cred
Get-WmiObject -Class Win32_Bios -ComputerName DC1 -Credential $cred
 
Get-WmiObject -Class Win32_Computersystem
> Domain              : WORKGROUP 
> Manufacturer        : Microsoft Corporation 
> Model               : Virtual Machine
> Name                : DESKTOP-01UULH5
> PrimaryOwnerName    :  student 
> TotalPhysicalMemory : 2146299904