PowerShell Techguy.at

WMI und PowerShell

PowerShell

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

2 thoughts on “WMI und PowerShell”

  1. 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

Leave a Comment

Your email address will not be published. Required fields are marked *

*