Get-WmiObject: Abfrage von WMI für Computerinformationen

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.

PS> Get-WmiObject -List

NameSpace: ROOT\cimv2

Name				Methods	Properties
CIM_Indication		{}		{CorrelatedIndications, IndicationFilterName, IndicationIde...
CIM_ClassIndication	{}    	{ClassDefinition, CorrelatedIndications, IndicationFilterNa........

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.

PS> Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem

SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 9600
RegisteredUser  : Windows User
SerialNumber    : 00252-00108-14656-AA864
Version         : 6.3.9600

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.

Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem | Select-Object -Property *

I can now see a property called Caption that lets me know the version of Windows.

PS> (Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem | Select-Object -Property *).Caption Microsoft Windows Server 2012 R2 Standard

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.

Get-WmiObject -Class CIM_DataFile -Filter "Compressed = 'True'"

Wenn Sie „WQL“ kennen, können Sie auch die Klasse auswählen und die „Filter“ selbst festlegen, indem Sie Ihre eigene WQL-Abfrage erstellen.

Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Compressed = 'True'"

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!

$cred = get-credential
$process = Get-WmiObject -Query "SELECT * FROM Meta_Class WHERE __Class = 'Win32_Process'" -namespace "root\cimv2" -computername 'FOO' -credential $cred $process.Create( "notepad.exe" )

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.

Source:
https://adamtheautomator.com/get-wmiobject/