Immer wenn wir Informationen über einen Windows-Computer und seine Komponenten herausfinden möchten, können wir dies mit Get-WmiObject
tun.
Nicht nur das Lesen, sondern auch das Ausführen von Aktionen auf lokalen oder entfernten Systemen ist mit Hilfe der WMI-Methoden möglich, die von Get-WmiObject
bereitgestellt werden. Dieses Cmdlet ist eines von mehreren in PowerShell, das mit dem WMI-Repository arbeiten kann, um die Verwaltung vieler Systeme deutlich zu erleichtern.
Auffinden von Klassen mit Get-WmiObject
Im einfachsten Fall kann dieses Cmdlet Informationen von einem lokalen Computer abfragen. Alles, was Sie wissen müssen, ist der Namespace (wahrscheinlich root\cimv2
, der Standardwert) und die WMI-Klasse, in der sich die gesuchten Informationen befinden.
Es gibt Tausende von Klassen, und Sie wissen wahrscheinlich noch nicht, welche Klasse Sie verwenden möchten. Mit Hilfe von Get-WmiObject
können wir alle verfügbaren Klassen in einem Namespace abfragen. Mit Get-WmiObject -List
können Sie alle Klassen im Namespace root\cimv2
anzeigen. Wenn Sie Klassen in einem anderen Namespace überprüfen möchten, können Sie auch den Parameter Namespace
verwenden.
Abrufen von WMI-Eigenschaften
Sobald Sie die Klasse haben, ist es an der Zeit, zu untersuchen und zu sehen, welche Eigenschaften in dieser Klasse vorhanden sind. Vielleicht möchte ich sehen, welches Betriebssystem ein Computer verwendet. Möglicherweise erstelle ich einen Bericht und möchte sehen, was eine ferne Maschine ausführt. Get-WmiObject
hat einen ComputerName
-Parameter, mit dem Sie einen oder mehrere Remote-Computer angeben können, anstatt lokal zu arbeiten.
Mein Remote-Computer ist ein Domänencontroller namens DC. Ich werde mir die Klasse „Win32_OperatingSystem“ ansehen, um zu sehen, welche Eigenschaften darin enthalten sind.
Das ist nützliche Information, aber ich sehe den Namen des Betriebssystems nicht. Ähnlich wie bei vielen anderen PowerShell-Ausgaben werden nicht alle Eigenschaften angezeigt. Dafür müssen wir „Select-Object“ verwenden, um alle Eigenschaften zurückzugeben.
I can now see a property called Caption
that lets me know the version of Windows.
Suche nach WMI-Eigenschaften
Was ist, wenn Sie nicht nach einer bestimmten Eigenschaft suchen, sondern nach einer Eigenschaft, die einen bestimmten Wert hat? Zum Beispiel können wir alle Instanzen in der Klasse „CIM_DataFile“ abfragen, aber das würde jede Datei im System zurückgeben! Stattdessen können wir Instanzen nach Wert filtern, indem wir entweder den „Filter“- oder den „Query“-Parameter verwenden. Lassen Sie uns beides durchgehen.
Als Beispiel verwenden wir „CIM_DataFile“. Vielleicht möchte ich nur Instanzen finden, die komprimierte Dateien repräsentieren. Da die „Compressed“-Eigenschaft eine Eigenschaft für jede Instanz ist und es sich um einen booleschen Wert handelt, kann ich den „Filter“-Parameter verwenden, um den Filter direkt an den WMI-Anbieter zu senden und nur Instanzen zurückzugeben, bei denen die „Compressed“-Eigenschaft „True“ ist.
Wenn Sie „WQL“ kennen, können Sie auch die Klasse auswählen und die „Filter“ selbst festlegen, indem Sie Ihre eigene WQL-Abfrage erstellen.
Aufrufen von WMI-Methoden
Get-WmiObject
kann nicht nur Informationen von WMI lesen, sondern auch das Aufrufen von WMI-Methoden erleichtern. Eine häufig verwendete WMI-Methode, die aufgerufen wird, ist die Create
-Methode in der Klasse Win32_Process
. Es gibt verschiedene Möglichkeiten, WMI-Methoden aufzurufen, wie z.B. die Verwendung von Invoke-WmiMethod
, aber dies kann auch mit Get-WmiObject
erfolgen. Wir müssen nur eine WMI-Instanz erfassen und dann die Methode auf diesem Objekt aufrufen.
Hier ist ein Beispiel für das Remote-Starten von notepad.exe auf einem Remote-Computer. Als Bonus verwenden wir auch eine alternative Anmeldeinformationen dafür!
WMI, DCOM und PowerShell Remoting
Eine letzte Sache, die erwähnt werden sollte, ist der Nachfolger dieses Cmdlets: Get-CimInstance
. Obwohl Get-CimInstance
einige Vorteile bietet, um PowerShell Remoting als standardmäßiges Remote-Verbindungprotokoll zu verwenden, ist Get-WmiObject
manchmal einfacher zu verwenden.
Get-WmiObject
verwendet DCOM, um mit Remote-Computern zu kommunizieren, und ist in der Regel ebenfalls verfügbar. Andernfalls müssen Sie PowerShell Remoting auf Remote-Endpunkten aktivieren, wenn Sie Get-CimInstance
über WSMAN verwenden möchten.
Für eine vollständige Aufschlüsselung schauen Sie sich die Microsoft-Dokumentation an.