Tags: PowerShell, WMI
Windows bietet zahlreiche WMI- bzw. CIM-Klassen, die wiederum viele Eigenschaften und Methoden enthalten. PowerShell kann die Suche nach den benötigten Informationen durch Filtern der Ergebnisliste vereinfachen.
Bei der Windows Management Instrumentation (WMI) handelt es sich um die Microsoft-Implementierung des offenen Standards Common Information Model (CIM). Verwirrend aus PowerShell-Sicht ist jedoch, dass die Version 3.0 zusätzlich zu den Cmdlets für WMI noch Pendants für CIM brachte. So erhielt etwa Get-WmiObject einen Gegenspieler namens Get-CimInstance.
Ein wesentlicher Unterschied zwischen den WMI- und CIM-Cmdlets besteht darin, dass Erstere über DCOM kommunizieren und Zweitere über WinRM, und somit über HTTP(S).
Aber nicht genug damit, Microsoft implementierte parallel zu den WMI- auch die reinen CIM-Klassen. So existiert beispielsweise neben Win32_Process auch CIM_Process, wobei sich beide in den von ihnen bereitgestellten Eigenschaften und Methoden unterscheiden.
Insgesamt kommt auf diese Weise eine große Zahl an Klassen zusammen, auf einem aktuellen Windows 10 sind es 1117. Ihre vornehmliche Verwendung besteht im (Remote-)Abrufen von Systeminformationen, aber die enthaltenen Methoden können auch Einstellungen ändern.
WMI-Klassen filtern
Wenn man sich in diesem Wust orientieren möchte, dürfte das Wälzen der Dokumentation nicht unbedingt der schnellste Weg zum Ziel sein. Als Alternative bietet sich das Cmdlet Get-CimClass an. Mit dem Parameter ClassName kann man das Suchergebnis einfach eingrenzen, auch weil dieser Wildcards akzeptiert.
Um nur die (am meisten genutzten) Win32-Klassen anzuzeigen, gibt man
Get-CimClass -ClassName Win32_*
Nachdem dieser Befehl immer noch eine Liste von 666 Klassen auswirft, wird man den Filter weiter verengen müssen, etwa indem man die zahlreichen Klassen für Performance und Plug-and-Play ausschließt:
Get-CimClass -ClassName Win32_* |
? {$_.CimClassName -notlike "*Perf*" -and $_.CimClassName -notlike "*PnP*"}
Eigenschaften in Klassen finden
Falls man schon weiß, welche Eigenschaft man benötigt, aber nicht, in welcher Klasse sie vorhanden ist, dann hilft das Cmdlet ebenfalls weiter:
Get-CimClass -ClassName Win32_* -PropertyName OSarchitecture
Dieses Beispiel findet die Klasse Win32_OperatingSystem, deren Eigenschaft OSarchitecture Auskunft darüber gibt, ob das Betriebssystem in einer 32- oder 64-Vit-Version vorliegt.
Klassen nach Methoden filtern
Nach einem ähnlichen Muster kann man nach bestimmten Methoden suchen. Will man etwa einen Remote-PC über die Kommandozeile umbenennen, dann sucht man folgendermaßen in allen Win32-Klassen nach der Methode rename:
Get-CimClass -ClassName Win32_* -MethodName rename
Das Ergebnis umfasst zwar 8 Klassen, aber man kann sich schnell zusammenreimen, dass Win32_ComputerSystem die richtige sein muss.
Parameter abfragen
Verwendet man Methoden von WMI-Klassen, dann stellt sich natürlich häufig die Frage, welche Parameter sie in welcher Reihenfolge erwarten. Dies lässt sich auf folgende Weise ermitteln:
(Get-CimClass -ClassName Win32_Computersystem).CimClassMethods["rename"].Parameters
Liste der Eigenschaften und Methoden auflösen
Schließlich stellt sich häufig das Problem, dass man eine Klasse näher ins Auge fassen will, aber aus der standardmäßigen Darstellung der Eigenschaften und Methoden nicht schlau wird. In diesem Fall hilft dieser Befehl:
Get-CimClass -ClassName Win32_OperatingSystem |
select -ExpandProperty CimClassProperties
Mit dem Parameter ExpandProperty löst Select-Object die kompakte Darstellung in eine Liste auf, die auch Detailinformationen zu den Attributen enthält. Möchte man ihn auf Methoden anwenden, dann ersetzt man im obigen Beispiel CimClassProperties durch CimClassMethods.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- BitLocker aktivieren mit manage-bde, PowerShell oder WMI
- Programme (remote) mit PowerShell deinstallieren
- Get-ComputerInfo: Systeminformationen auslesen mit PowerShell
- Installationsvarianten (Nano, Core, Desktop) und Editionen von Windows Server erkennen
- Nach WMI-Klassen suchen und Abfragen erzeugen mit WMI Explorer
Weitere Links