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