![]() |
Ü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.
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 <string>] -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.
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 *
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‘“
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.
Microsoft Deutschland GmbH
Firmenprofil
Kontakt
posted am 01.09.2010 um 11:10 von Joachim Bernert
posted am 31.08.2010 um 11:03 von nicht registrierter User
posted am 30.08.2010 um 22:15 von nicht registrierter User
posted am 30.08.2010 um 17:01 von nicht registrierter User
posted am 26.08.2010 um 11:40 von Leserbrief SNET
(nicht registrierter User)
Kommentar abschicken