Suchen

System-Administration mit Microsofts PowerShell Teil 7 Windows Management Instrumentation (WMI) im Einsatz

| Autor / Redakteur: Markus Widl / Dipl.-Ing. (FH) Andreas Donner

Im siebten Teil der PowerShell-Artikelserie zeigt IP-Insider, wie mit Hilfe des Cmdlets get-wmiobject auf die WMI-Schnittstelle zur Systemverwaltung zugegriffen wird.

Firma zum Thema

( Archiv: Vogel Business Media )

Im Windows-Administrationsumfeld erreicht WMI (Windows Management Instrumentation) eine immer größere Bedeutung. Bei WMI handelt es sich um Microsofts Implementierung von WBEM (Web-based Enterprise Management), ein Konzept zur plattformunabhängigen Systemverwaltung.

Über WMI kann objektbasiert auf das Computersystem (z.B. Platten, Netzwerkkarten, Drucker), Betriebssystem (z.B. Prozesse, Ereignisanzeige, Freigaben) und auf allgemeine Informationsobjekte (z.B. installierte Software und Leistungsindikatoren) zugegriffen werden. All diese Informationen stehen in hunderten verschiedener Klassen. Und jede neue Windows-Version bringt einen weiteren Stapel an Klassen mit, mit denen die neuen Funktionalitäten verwaltet werden können.

Eine Liste samt Dokumentation der verfügbaren Klassen ist unter der am Ende angegebenen Adresse zu finden.

Ermittlung der verfügbaren WMI-Klassen

Welche Klassen auf dem verwendeten Computer aktuell bereitstehen, kann über das Cmdlet get-wmiobject ermittelt werden. Der allgemeine Aufbau sieht dabei wie folgt aus:

get-wmiobject [-computername ] -list

Der Zugriff über get-wmiobject ist sogar auf Remotemaschinen möglich, indem der Parameter -computername auf den gewünschten Rechnernamen gesetzt wird. Dabei muss auf der Remotemaschine noch nicht einmal die PowerShell installiert sein, lediglich WMI wird vorausgesetzt. Natürlich müssen auch die Berechtigungen auf WMI so gesetzt sein, dass der PowerShell-Anwender darauf Zugriff hat.

Der Parameter -computername kann bei allen weiteren Aufrufvarianten von get-wmiobject eingesetzt werden.

Ermitteln aller Instanzen einer Klasse

Um alle Objekte einer bestimmten Klasse aufzulisten, wird der Parameter -class gesetzt. Als Beispiel sollen alle installierten Anwendungen ermittelt werden. Diese Informationen befinden sich in Objekten des Typs Win32_Product. Der Aufruf sieht damit folgendermaßen aus:

get-wmiobject -class Win32_Product

Die zurückgelieferten Objekte können natürlich auch in der PowerShell-Pipeline weiterverarbeitet werden. Sollen etwa alle verfügbaren Eigenschaften der Objekte ausgegeben werden und nicht nur die von der Standardausgabe ausgewählten, kann dies über select-object erreicht werden.

get-wmiobject -class Win32_Product | select-object -property *

Auswahl der Objekte über WQL

WMI kennt zur Auswahl bestimmter Objekte die Abfragesprache WQL (WMI Query Language). Diese lehnt sich an SQL an, ist jedoch auf das Schlüsselwort SELECT beschränkt. Eine WQL-Abfrage zur Ermittlung eines bestimmten Drucker-Objekts könnte damit wie folgt aussehen:

get-wmiobject -query „select * from Win32_Printer where name=‘HP Laserjet‘“

Objekteigenschaften ändern

Die meisten über WMI verwalteten Informationen sind nur lesbar, einige lassen sich aber dennoch ändern. Im folgenden Beispiel soll die Bezeichnung des Laufwerks C: geändert werden:

get-wmiobject -class Win32_LogicalDisk -filter „deviceid=‘c:‘“ | foreach { $_.volumename = „Boot“; $_.Put() }

Dabei wird zunächst das passende Win32_LogicalDisk-Objekt ermittelt, diesmal über den Parameter -filter, der eine verkürzte Form der WQL-Abfrage darstellt. Anschließend wird über foreach das einzige zurückgegebene Objekt bearbeitet. $_ repräsentiert dieses Objekt in der Schleife, dessen Eigenschaft „volumename“ gesetzt wird. Bei solchen Änderungen ist es erforderlich, die Methode Put des Objekts aufzurufen, sonst gehen sie verloren.

Zum sinnvollen Einsatz von WMI ist es sehr hilfreich, die Dokumentation zu überfliegen. Denn gerade bei den ersten Schritten mit WMI ist es nicht einfach, zu den gewünschten Informationen zu gelangen.

Im nächsten Teil der PowerShell-Artikelserie wird gezeigt, wie von der PowerShell aus auf COM-Objekte, etwa zur Fernsteuerung von Anwendungen, zugegriffen wird.

Artikelfiles und Artikellinks

(ID:2003977)