Grundlagen und Einsatz Windows Management Instrumentation

Windows-Praxis: Administrieren mit WMI und WMIC

23.10.2012 von Frank-Michael Schlede und Thomas Bär
Administratoren und Systembetreuer müssen sich spätestens seit Windows Server 2012 wieder intensiver mit der Arbeit direkt an der Kommandozeile befassen. Wir zeigen, dass es nicht immer die PowerShell sein muss: Mit WMI und vor allen Dingen WMIC lassen sich systemnahe Aufgaben schnell und einfach erledigen.

Ganz egal ob es sich um Administratoren, Systembetreuer und sogenannte Power-User handelt - viele von ihnen nehmen für sich in Anspruch, dass sie virtuos mit der Kommandozeile umgehen können (müssen). Microsoft trägt diesem Anspruch Rechnung, indem immer mehr Aufgaben der Windows-Systeme mithilfe der PowerShell erledigt werden können und teilweise auch werden müssen.

Nun gibt es aber immer noch mehr als genug System-Profis, die darauf bestehen, dass Kommandozeilenwerkzeuge antiquiert sind und dass es möglich sein muss, alle Aufgaben auch direkt aus der Windows-Oberfläche heraus zu bewältigen. Trotzdem besteht immer wieder die Notwendigkeit, gerade wenn es um die Automatisierung von Administrations- und Verwaltungsaufgaben geht, mit Werkzeugen und Script-Sprachen direkt an der Kommandozeile zu arbeiten. Allerdings muss es nicht immer die PowerShell sein, wenn es darum geht, Systemaufgaben an der Kommandozeile zu lösen - wir zeigen, welches Potenzial in WMI (Windows Management Instrumentation) und WMIC (Windows Management Instrumentation Command-Line) steckt, erläutern die Grundlagen und geben Tipps zur Arbeit mit diesen Ressourcen - was auch ganz ohne Power-Shell gelingen kann.

WMI und WMIC: Grundlagen

Den System-Profis stand schon in früheren Windows-Versionen mit WMI eine besondere Technik zur Verwaltung der Systeme zur Verfügung. Bei der Windows Management Instrumentation (WMI) handelt es sich um Microsofts Implementierung des Common Information Models (CIM), wobei der Hersteller natürlich auch eigene Erweiterungen mit eingebracht hat. CIM ist dabei das sogenannte Informationsmodell des standardisierten Web Based Enterprise Managements (WBEM) für Windows: Bei WBEM geht es darum, Standardfunktionalitäten zur Verfügung zu stellen, mit denen dann Rechner administriert werden können.

Bildergalerie:
WMI und WMIC
Wie stelle ich fest, ob WMI auf dem System aktiv ist? Dies kann (wie in diesem Beispiel auf einem Windows-8-System) in der Computerkonfiguration des entsprechenden Rechners überprüft werden.
WMI und WMIC
Vier unterschiedliche Register stehen bei der WMI-Steuerung zur Verfügung: Bei der Sicherheit kann ein Administrator verschiedene Rechte beim Umgang mit WMI für Gruppen oder Benutzer festlegen.
WMI und WMIC
Einfache Abfrage, die viele Informationen zurückliefert: Dieser Befehl liest alle Eigenschaften und Werte der Instanz „CDROM“ aus und gibt diese dann in der Konsole aus.
WMI und WMIC
Der Einsatz der Alias-Bezeichnung und des Get-Befehls: Hier werden auf einem Windows-7-System die Namen der dort installierten Softwarepakete angezeigt.
WMI und WMIC
„Friendly Names“ in der Übersicht: Für die wichtigsten WMI-Klassen stehen entsprechende Alias-Namen zur Verfügung, mit denen dann auch WMIC arbeiten kann.
WMI und WMIC
Eine dedizierte Abfrage ist unter WMIC sowohl mit Hilfe des „Get“-Befehls als auch mit einer SQL-ähnliche Abfragefunktion möglich.
WMI und WMIC
Nützliche Abfrage mit dem GET-Befehl: Hier werden auf einem Windows-7-System drei Eigenschaften des Alias "Logicaldisk" ausgegeben.

WMI ermöglicht sowohl den schreibenden als auch den lesenden Zugriff auf beinahe alle Einstellungen von Windows-Systemen, weshalb es sich auch bei den Windows-Systemen zu einer der wichtigsten Schnittstellen zur Administration und Fernwartung entwickelt hat. Das gilt im gleichen Maße für Workstation- wie für die Server-Systeme. Grundsätzlich basiert die Technik auf COM und DCOM und wurde von Microsoft zum integralen Bestandteil der Windows-Systeme ab Windows 2000 gemacht.

Gut zu wissen: Architektur, Provider, Konsumenten

Die Architektur: WMI ist kein einzelnes Programm, sondern besteht aus mehreren Programmen und verschiedenen Datenbanken pro Windows-Computer (Repositories). WMI ist dreischichtig aufgebaut und besteht aus den folgenden Teilen:

• den Providern,

• dem CIM Object Manager (CIMOM) und

• den eigentlichen "Konsumenten".

Die Provider: Sie stellten die unterste Schicht von WMI dar. Bei ihnen handelt es sich um Softwareagenten, die zum Beispiel Informationen über das Betriebssystem, Dienste, Programme oder auch Treiber verarbeiten und an den CIM Objekt Manager weiterreichen. Dabei extrahieren sie die benötigten Managementinformationen aus den verschiedenen Datenquellen über verschiedene Softwareschnittstellen: Diese Abstraktion ist ein ganz wichtiger Teil des WMI-Konzepts. Auf diese Weise haben Versionsunterschiede sowie Anpassungen in der API von Programmen oder Treibern weitaus weniger Einfluss auf die Administration der Systeme.

Der CIM Object Manager (CIMOM): Dieser Teil von WMI ist als Systemdienst unter der Bezeichnung "WinMgmt" auf den Windows-Rechnern aktiv. CIMOM ist ein Informations- und Anfragen-Broker, der über ein eigenes Repository verfügt. Er stellt fest, welche Klassen verfügbar sind. Dazu speichert er die Klassendefinitionen und den verantwortlichen Provider der Klasseninstanzen im CIM-Repository. Fragt eine Managementanwendung an, so wird diese Anfrage vom CIMOM ausgewertet, und anschließend wird der zuständige Provider bestimmt. Diese wiederum verbinden sich mit dem CIMOM über verschiedene definierte COM-Schnittstellen. CIMOM speichert diese Informationen in verschiedene strukturierte Klassen und ermöglicht so einen gezielten Zugriff auf gewünschte Managementinformationen.

Die Konsumenten: Hier sind dann unter anderem die großen Managementlösungen wie Microsofts SCCM (System Center Configuration Manager), Empirum von Matrix42 oder DSM (Desktop & Server Management) von Frontrange anzutreffen, die auf diesem Weg dann die benötigten Informationen über die zu verwaltenden Windows-Systeme bekommen, aber auch einfache Script-Jobs oder direkte Zugriffe über WMIC (Windows Management Instrumentation Command-Line) gehören zu den Konsumenten. Diese WMI-Daten-Konsumenten müssen dabei keine Informationen über die exakte Gestalt der Provider und deren APIs haben, da CIMOM diese Informationen bereits entsprechend abstrahiert hat.

Was man noch für die Arbeit mit WMI wissen sollte …

Da WMI genauso wie objektorientierte Programmiersprachen mit Klassen arbeitet, sollten auch Administratoren und Systemverwalter, die sich in der Regel eher nicht mit der Entwicklung von Programmen befassen müssen, einige wichtige Begriffe aus diesem Umfeld kennen, die bei der Arbeit mit WMI von Bedeutung sind.

Eigenschaften: Die "Properties" bieten sowohl beschreibende als auch operative Informationen zu einer Klasse. Als gutes Beispiel kann die Instanz einer Klasse von "Win32_DiskDrive" dienen: In dieser Klasse gibt es eine Eigenschaft mit der Bezeichnung "InterfaceType". Diese Eigenschaft hat dann üblicherweise einen Wert, der beispielsweise "IDE" lauten kann

Methoden: Dies sind die Funktionalitäten, die von einer Klasse zur Verfügung gestellt werden. So bietet beispielsweise die Klasse "Win32_Directory" eine Methode mit dem Namen "Compress()". Dahinter verbirgt sich der Befehl "Komprimieren", der auch in der grafischen Oberfläche von Windows zu finden ist. Wer mit WMI seine Windows-Systeme administrieren will, wird schnell feststellen, dass die Methoden dabei sehr hilfreich sind.

Ereignisse: Bei den "Events" handelt es sich im Prinzip um Meldungen, die ein "WMI-Konsument" quasi abonnieren kann. In diesem Zusammenhang werden traditionell Ereignisse angefragt, die beispielsweise den Ausfall einer Komponente oder Verbindung oder auch das Verlassen von zuvor definierten Wertebereichen betreffen. Ein Beispiel hierfür ist die Auslastung einer CPU: Die Klasse "Win32_Processor" verfügt über eine Eigenschaft "LoadPercentage". Steigt die Auslastung beispielsweise auf über 75 Prozent, so wäre das sicher ein Ereignis, das den Administrator in einem Unternehmen interessieren könnte.

Wie stelle ich fest, ob WMI auf einem Windows-System aktiv ist?

Standardmäßig ist die Windows Management Instrumentation auf den modernen Windows-Systemen installiert und auch aktiviert. Wer aber genau feststellen will, ob das auf seinem System zutrifft, findet die WMI-Informationen auf folgende Weise:

• Bis einschließlich Windows 7 klicken Sie auf Start/Alle Programme/Verwaltung und anschließend auf Computerverwaltung. Unter Windows 8 geben Sie direkt am Startbildschirm Computerverwaltung ein oder öffnen alternativ mittels Windows-Taste + X das sogenannte Power-Menü, in dem Sie den direkten Zugriff auf die Computerverwaltung finden.

Wie stelle ich fest, ob WMI auf dem System aktiv ist? Dies kann (wie in diesem Beispiel auf einem Windows-8-System) in der Computerkonfiguration des entsprechenden Rechners überprüft werden.

• Öffnen Sie mit dem Plus-Symbol den Knoten Dienste und Anwendungen. Klicken Sie dann auf WMI-Steuerung. Anschließend klicken Sie mit der rechten Maustaste auf die WMI-Steuerung und wählen aus dem Kontextmenü den Befehl Eigenschaften, mit dem Sie den Status des WMI-Dienstes einsehen und modifizieren können.

Dieser Eigenschaftendialog der WMI-Steuerung umfasst lediglich vier Register, die jedoch alle für das korrekte Arbeiten mit WMI zwingend erforderlich sind. Im Register Allgemein wird angegeben, welche WMI-Version auf dem Computer aktiv ist und wo die Datenbanken von WMI gespeichert werden. Im Register Sicherung/Wiederherstellung besitzen Sie die Möglichkeit, das Repository zu sichern und bei Bedarf auch wiederherzustellen. Das Betriebssystem speichert allerdings die WMI-Datenbank in regelmäßigen Abständen selbstständig, sodass hier üblicherweise kein manueller Benutzereingriff erforderlich ist. Der Standardpfad für die WMI-Datenbanken lautet, ganz unabhängig davon, ob es sich um ein 32-Bit oder ein 64-Bit-Betriebssystem handelt, immer folgendermaßen:

%systemroot%\system32\wbem\repository

Vier unterschiedliche Register stehen bei der WMI-Steuerung zur Verfügung: Bei der Sicherheit kann ein Administrator verschiedene Rechte beim Umgang mit WMI für Gruppen oder Benutzer festlegen.

Dieser Pfad gilt auch weiterhin und hat sich für die neuen Windows-8-Systeme nicht geändert. Das Register "Sicherheit" ermöglicht es dem Administrator, verschiedene Rechte beim Umgang mit WMI für Gruppen oder Benutzer festzulegen. Standardmäßig erhalten Administratoren die volle Zugriffsberechtigung auf WMI, und die Gruppe Authentifizierter Benutzer verfügt über das Recht zum Ausführen von Methoden und zum Speichern von erfassten Daten.

Die WMI-Berechtigungen sollten stets genau bedacht werden - zu schwach eingestellte Zugriffsrechte können für die Sicherheit in Unternehmen sehr negative Folgen haben. Im Register Erweitert wird schließlich der standardmäßig festgelegte Namensraum ausgegeben beziehungsweise definiert. Dieser Standard-Namespace wird immer dann verwendet, wenn in WMI-Befehlen nicht explizit angegeben ist, welcher der Namensräume abgefragt werden soll.

Praxis: an der Kommandozeile arbeiten

Die einfachste Form des Zugriffs geschieht über die Windows Management Instrumentation Console (WMIC). Der Vorteil dieser Art des Arbeitens besteht darin, dass so kein separater Interpreter für eine Kommandosprache zusätzlich geladen werden muss und dass der Administrator auch keine umfangreichen Programmkonstrukte entwerfen und betreuen muss, um auf die Systemdaten zuzugreifen. WMIC steht grundsätzlich ab Windows XP/Server 2003 zur Verfügung

Windows-Versionen, WMI und WMIC

Windows-Version

WMIC-fähig

WMI-fähig

Windows Server 2012

Ja

Ja

Windows 8

Ja

Ja

Windows Server 2008/R2

Ja

Ja

Windows 7/Vista

Ja

Ja

Windows Server 2003

Ja

Ja

Windows XP Professional

Ja

Ja

Windows XP Home

Nein

Ja (kein Remote-Zugriff möglich!)

Windows 2000 Server

Nein

Ja

Windows 2000 Professional

Nein

Ja

Windows NT

Nein

Ja (nachrüstbar, wenn SP4 installiert wurde)

Windows Me

Nein

Ja

Windows 9x

Nein

Nachrüstbar

Allerdings müssen Systeme, auf die Remote zugegriffen wird, dazu lediglich den WMI-Dienst ausführen.

Der Einsatz von WMIC

Für den Einsatz von WMIC stehen Ihnen zwei unterschiedlichen Modi zur Verfügung:

• Im interaktiven Modus rufen Sie in der Eingabe mit wmic wiederum die WMIC-Eingabeaufforderung aus. Diese können Sie dann über die Befehle "exit" oder "quit" wieder verlassen.

• Im Batch-Modus werden WMIC-Befehle und die entsprechenden Parameter zusammen aufgerufen, und Sie erhalten direkt das Ergebnis.

So ist dann beispielsweise zum Auslesen eines bestimmten Wertes auch nur eine einzige Zeile erforderlich:

wmic cdrom get * /value

Dieser Befehl liest alle Eigenschaften und Werte der Instanz "CDROM" aus und gibt diese in der Konsole aus. Wird dabei dann "Keine Instanzen verfügbar" ausgegeben, so ist möglicherweise an dem entsprechenden System kein CD/DVD/BR-Laufwerk vorhanden oder es wurde deaktiviert. Zudem zeigt dieser Aufruf auch den Einsatz des "get"-Befehls, mit dem WMIC Informationen abfragen kann.

Einfache Abfrage, die viele Informationen zurückliefert: Dieser Befehl liest alle Eigenschaften und Werte der Instanz "CDROM" aus und gibt diese dann in der Konsole aus.

Haben Sie auf dem Windows-System WMIC zum ersten Mal aufgerufen, so ist es völlig normal, dass die Rückmeldungen des Programms beim ersten Start ein wenig träge erscheinen. Allerdings besitzt diese Art des Aufrufs den Nachteil, dass eine große Anzahl von Daten auf der Konsole über den Bildschirm scrollt. So kann es in vielen Fällen dann weitaus praktischer sein, nur eine spezifische Eigenschaft auszulesen. Dazu muss der Aufruf lediglich leicht angepasst werden:

wmic cdrom get "Name" /value

Nun wird ausschließlich diese eine spezifische Eigenschaft des optischen Laufwerks ausgegeben - in diesem Fall also der Name des Laufwerks. Verzichten Sie an dieser Stelle auf den Schalter "/value", so zeigt der Befehl zuerst den Eigenschaftennamen und in der nächsten Zeile dann den dazugehörigen Wert.

Sich intensiver mit WMI beschäftigen

Auf die gezeigte Weise gelingt es also, die entsprechenden Eigenschaftennamen auszulesen. Aber fast alle Anwender, die anfangen, mit den Kommandos rund um WMI zu arbeiten (und das gilt gleichermaßen für die Anwender, die über eine Script-Sprache wie PowerShell auf die WMI-Funktionalitäten zugreifen), stellen sich die Frage: Welche Klassen stellt WMI mir zur Verfügung, und welche davon sind im täglichen Einsatz nützlich?

Der Einsatz der Alias-Bezeichnung und des Get-Befehls: Hier werden auf einem Windows-7-System die Namen der dort installierten Softwarepakete angezeigt.

Wer tiefer in das Scripting auch und gerade rund um WMI einsteigen will, der sollte es nicht versäumen, das Script Center von Microsoft oder noch besser gleich den englischsprachigen Blog des Scripting Guy zu besuchen. Aber die Ausgabe der wichtigsten Kategorien ist auch über WMIC möglich. Ein großer Vorteil des Einsatzes WMIC besteht darin, dass dieses Kommandozeilenwerkzeug die Nutzung von Alias-Namen erlaubt, um so beispielweise auf die wichtigsten Kategorien beziehungsweise WMI-Klassen einfach zugreifen zu können. Wollen Sie beispielsweise auf der Konsole feststellen, welche Alias-Bezeichnungen zur Verfügung stehen, so können Sie dazu den folgenden Befehl verwenden:

wmic alias get friendlyname, target

"Friendly Names" in der Übersicht: Für die wichtigsten WMI-Klassen stehen entsprechende Alias-Namen zur Verfügung, mit denen dann auch WMIC arbeiten kann.

Mit diesem WMIC-Befehl erhalten Sie sodann eine Auflistung aller Alias-Kurzbezeichner und ihr jeweiliges Ziel in der WMI-Struktur. Dieses ebenfalls wieder sehr umfangreiche Ergebnis zeigt ein weiteres Mal, dass sich mit WMI faktisch alle wichtigen Windows-Ressourcen ansteuern und auslesen lassen. Sie können eine solche Liste auch durch den Aufruf:

wmic/?

gefolgt von einer doppelten Bestätigung mit der Eingabetaste auf den Bildschirm bringen. Allerdings wird Ihnen dabei der tatsächliche Bezug auf die verfügbaren WMI-Alias-Namen nicht mit angezeigt.

Mit WMI arbeiten

Damit Sie Informationen abfragen oder verändern beziehungsweise Methoden aufrufen können, muss WMIC zunächst Instanzen der entsprechenden Klasse finden. Zu diesem Zweck können Sie einfach WMIC zusammen mit der Alias-Bezeichnung eingeben, wie in diesem Beispiel:

wmic useraccount

Sie können WMIC aber immer auch zusammen mit dem WMI-Klassennamen einsetzen, denn Alias-Bezeichnungen stehen grundsätzlich nur für die wichtigsten WMI-Klassen zur Verfügung. Wir haben in der Tabelle einige wichtige und für den System-Profi interessante WMI-Klassen zusammengefasst.

Nützliche WMI-Klassen

Name der Klasse

beinhaltet Informationen zu

win32_bios

BIOS (Versionsnummer, Hersteller und weitere Daten

win32_computersystemproduct

Informationen zur Hardware sowie zum Hersteller, Identifikationsnummer etc.

win32_networkconnection

Netzwerklaufwerke, die gemappt wurden

win32_networkadapter

Informationen zu vorhandenen Netzwerkkarten (Hersteller, MAC-Adresse etc.)

win32_operationsystem

Namen des Betriebssystems (Versions- und Build-Nummer, Betriebssystemverzeichnis etc.)

win32_printer

Liste aller installierter Drucker

win32_printerdriver

Liste aller installierten Druckertreiber

win32_process

Liste der aktiven Prozesse

win32_product

Liste der auf dem System installierten Software

win32_service

Liste der Dienste auf dem Windows-System

Ein weiterer Vorteil des Einsatzes von WMIC besteht darin, dass der Zugriff auf diesem Weg nicht auf das lokale System begrenzt ist. Soll ein anderer Windows-PC im Netzwerk abgefragt werden, so müssen Sie das Kommando um den Schalter "/node" ergänzen.

wmic /node:<Rechnername> cpu get "Name" /value

Dieser Befehl liest den Namen eines benannten Windows-Computers aus und gibt diesen dann auf der Konsole aus. Wird der entsprechende PC im Netzwerk nicht gefunden, so zeigt der Befehl die Fehlermeldung "RPC-Server nicht verfügbar" an.

WMIC richtig einsetzen

Allerdings vergehen in der Regel einige Sekunden, bis dieser Fehler dann angezeigt wird. Wer WMIC in einem größeren Batch-Job einsetzen möchte, kann und wird diese Wartezeit nicht akzeptieren wollen. Natürlich ist es möglich, eine Vorabprüfung durchzuführen, durch die dann die Erreichbarkeit des entfernten Systems überprüft wird.

Nachfrage: Eine dedizierte Abfrage ist unter WMIC sowohl mithilfe des "Get"-Befehls als auch mit einer SQL-ähnliche Abfragefunktion möglich.

Aber es geht auch viel einfacher: WMIC bietet den Schalter "/failfast" an. Ist dieser Schalter gesetzt, so prüft WMIC die Erreichbarkeit des entsprechenden Systems, ehe die Abfrage an den entfernten CIMOM gesendet wird. Der Aufruf hat dann die folgende Form:

wmic /node:<Rechnername> /failfast:on cpu get "name" /value

Wir haben in diesem Beispiel die Form "/failfast:on" gewählt, denn dadurch verkürzt sich die Zeitspanne bis zur Fehlermeldung auf rund zwei Sekunden, was bei sehr großen Batch-Jobs eine durchaus akzeptable Zeit sein dürfte.

Aber auch die WMI-Methoden lassen sich mithilfe von WMIC aufrufen und nutzen, wie der folgende Aufruf zeigt:

wmic service where name='WUAUSERV' call changestartmode disabled

Mit diesem Befehl kann beispielsweise die Startart des "Windows Update Dienstes" ausgeschaltet werden. Soll sie dann wieder eingeschaltet werden, so geschieht das mithilfe des gleichen Aufrufs und "enabled".

Nützliche Abfrage mit dem Get-Befehl: Hier werden auf einem Windows-7-System drei Eigenschaften des Alias "Logicaldisk" ausgegeben.

Wie mächtig die Abfragen mittels WMIC sind, zeigen wir hier in einem letzten Beispiel. So ist es möglich, Abfragen an WMI auch in SQL-ähnlicher Form durchzuführen. Der folgende Befehl listet beispielsweise nur die Drucker auf, deren Name mit L beginnt:

wmic Printer WHERE "Name like 'L%' " GET Name

Experimentieren Sie einfach mit den Möglichkeiten und Fähigkeiten von WMI und vor allen Dingen auch von WMIC. Lassen Sie sich dabei keinesfalls von den zunächst vielleicht unübersichtlichen Ausgaben abschrecken. Ein einfacher Befehl mithilfe von "Get":

wmic logicaldisk get name,volumename,filesystem

bringt beispielsweise schnell und einfach drei wichtige Eigenschaften des Alias "Logicaldisk" auf dem Schirm und zeigt, wie mächtig dieses Kommandozeilenwerkzeug ist. Wer diese Ausgabe via WMI und VBScript erzeugen will, benötigt dafür in der Regel bereits mehrere Zeilen Programmcode. (mje)