Was ist WMI?
Benötige ich WMI noch wo doch PowerShell so viel besser ist?
Der eine oder andere wird sich diese Fragen nun stellen und ich muss sagen, WMI wird noch benötigt.
Kommt sicherlich auf die Aufgabenstellung an, aber ich habs jetzt doch schon einige Male benötigt damit meine Scripts sauber arbeiten.
Es können mittlerweile sehr viele Werte mittels PowerShell abgefragt oder gesetzt werden, aber leider noch nicht alle.
Somit benötigen wir noch WMI, wie das funktioniert zeige ich euch in diesem Artikel
WMI Abfragen
Den meisten sollte die WMI Klasse Win32_OperatingSystem bekannt sein, diese versuchen wir nun mal mittels PowerShell abzufragen
Get-WmiObject -Class Win32_OperatingSystem
Als Ergebnis erhalten wir folgendes:
SystemDirectory : C:\WINDOWS\system32
Organization :
BuildNumber : 9600
RegisteredUser : michael@techguy.at
SerialNumber : 00180-19164-68400-AAOEM
Version : 6.3.9600
Es fällt auf, das nur 6 Werte angezeigt werden, obwohl die Klasse viel mehr zu bieten hat.
Somit können wir mit folgendem Kommando mehr Werte zurückholen
Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property CSName,LastBootUpTime
und bekommen nun den Rechnernamen und den Zeitstempel des letzten Boots
CSName LastBootUpTime
—— ————–
SEIMI-NB 20131211200241.696992+060
WMI Methoden
Es gibt jedoch auch WMI Methoden, also Aktionen die ausgeführt werden können.
Ein einfaches Beispiel ist die Methode Win32Shutdown die ich hier mal zeigen werde.
Dieses Kommando würde den aktuellen Benutzer abmelden
Get-WmiObject -class win32_operatingsystem | Invoke-WMIMethod -name win32Shutdown -ArgumentList 0
Der Wert bei Argumentlist gibt den Typ an, hier gibt es mehrere Optionen
- 0 = Abmelden
- 4 = erzwungenes Abmelden
- 1 = Herunterfahren
- 5 = erzwungenes Herunterfahren
- 2 = Neustart
- ….
Natürlich könnt ihr die WMI Abfragen oder Mehoden auch auf Rechner im Netzwerk ausführen
Diese Kommando würden den Rechner “NB01” also neustarten
Get-WmiObject -class win32_operatingsystem -ComputerName NB01 | Invoke-WMIMethod -name win32Shutdown -ArgumentList 5
WMI Query
Natürlich können auch WMI Abfragen mittels PowerShell ausgeführt werden. Wer WMI kennt, weiß das hier die Abfragen sehr ähnlich der SQL Abfrage sind, also testen wir mal folgende Abfrage.
Hier fragen wir die Klasse “Win32_Volume” nach allen Drives mit dem Namen “C:%”, sollte als nur eine Drive zurückkommen
Get-WmiObject -Query “Select * from Win32_Volume where Name like ‘c:%'”
Hier ist die richtige Anordnung von “ und ‘ zu beachten, also die gesamte Query in “” und die String Werte in ‘ ‘, wie also auch in einer SQL Query.
Ich hoffe ich konnte euch ein paar Beispiel zeigen wie man den Umfang von PowerShell mittels WMI erweitern kann
Michael Seidl aka Techguy
WMI wird auch mit der PowerShell immer wichtiger.
Microsoft stützt immer mehr Technikenauf dei WMI (CIM) Infrastruktur.
Viele Cmdlets von PowerShell nutzen eincha “nur” WMI z.B. das Cmdelt Get-Process.
mit der PowerShell 3.0 wurden die CIM Cmdlets eingeführt die auch die WMI Klassen benutzen.
http://richardspowershellblog.wordpress.com/2013/03/24/wmi-vs-cim/
PowerShell 4.0 führt die Desired Sate Configuration (DSC) ein die auch komplett auf der WMI Infrastuktur basiert.
http://blogs.technet.com/b/privatecloud/archive/2013/08/30/introducing-powershell-desired-state-configuration-dsc.aspx
Ich sehe nur, dass CIM (ehemals WMI) immer Stärker von Microsoft genutzt wird.
Es lohnt sich nicht nur CIM zu nutzen sondern auch mal unter die Haube zu schauen und z.B. die MOF Syntax zum definieren von eigenen CIM Klassen zu lernen.
Peter Kriegel
http://www.PowerShell-Group.eu
Hallo Peter,
danke für die ausführliche Information
Michael