Wmic (WMI-Console)

Windows-Systeme verstreuen zahllose Diagnose-Tools, Info-Programme und Bearbeitungswerkzeuge quer übers System. Es fehlt eine globale Zentrale mit allen Zugriffsmöglichkeiten. Lediglich die WMI (Windows Management Instrumentation) verspricht solche Fähigkeiten. Um diese nutzen können, ist normaler Weise Programmierung oder zumindest Scripting. Eine interaktive Alternative bietet jedes Windows-System zusätzlich mit der WMI-Konsole Wmic.exe. Die folgenden Beispiele zeigen einige Möglichkeiten der Wmic und der WMI insgesamt.

Wmic-Abfragen sind auf zwei Wegen möglich: Zum einen sowohl nach Aufruf von „wmic.exe“ am Wmic-eigenen Prompt „wmic:root\cli“, zum anderen von außen, zum Beispiel in einer Verknüpfung, durch jeweiliges Voranstellen von „wmic“. Der Befehl „wmic startup list“ produziert also das gleiche Ergebnis wie der Aufruf „wmic“ und der nachfolgende Befehl „startup list“. In beiden Fällen bewirkt das die Anzeige aller Autostarts aus der Registry und dem Autostart-Ordner.

„Wmic -?“: Eine erste Übersicht
Nach den globalen Parametern erscheinen die sogenannten Aliases – Kurznamen zur einfacheren Verwendung von insgesamt 71 Win32-Klassen. So steht etwa das Alias „process“ für „Win32_Process“.
Was Sie nun mit der einzelnen Klasse tatsächlich anfangen können, ergibt der nächste Schritt – weiter am Beispiel von „Process“:
wmic process -?
Die Konsole zeigt nun unter anderem die Optionen „Get“ und „List“ zur Info-Abfrage. Diese beiden Befehle stehen für sämtliche Klassen zur Verfügung. Welche Eigenschaften Sie damit für die jeweilige Klasse abfragen können, erfahren Sie wiederum mit
wmic process get -?
In diesem Fall sind es satte 40 Eigenschaften, die Sie einzeln oder komplett abfragen können.

Auflistung der vorhandenen Treiber…
wmic sysdriver get name

wmic process list -?
Das Verb „List“ ist zur Ausgabe von Systeminfos im Prinzip gleichwertig mit „Get“. „Get“ ist das präzisere Instrument, um einzelne Eigenschaften anzusprechen. „List“ ist oft bequemer: Es bietet eine bereits vorgegebene Auswahl von Eigenschaften. Welche Listen es für welche Klassen gibt, zeigt „wmic list -?

Auflistung der vorhandenen Treiber – mit „Get“ oder „List“
wmic sysdriver list instance
wmic sysdriver get name
„list instance“ ist in diesem Fall gleichbedeutend mit „get name“:

wmic process list brief
wmic process get ThreadCount,HandleCount,Name,Priority,ProcessId,WorkingSetSize
Auch diese beiden Befehle liefern dasselbe Resultat.

Formatierung: Bunt oder DOS-like
Wmic besitzt einige Optionen, die Informationen optisch ansprechend darzustellen. Die einfachste Möglichkeit, das oft überbreite Tabellenformat von „Get“ anders darzustellen, ist der Schalter „…get /value“. Vergleichen Sie die Ausgabe etwa von „wmic os get“ und „wmic os get /value“. Die erste Variante ist für die direkte Bildschirmdarstellung praktisch untauglich, die zweite gut lesbar.

wmic os get /format:hform > os.HTM
wmic qfe get caption,description,HotFixID,InstalledOn,ServicePackInEffect
/format:htable > patches.htm

oder:

wmic /output:os.htm os get /format:hform
wmic /output:patches.htm qfe get caption,description,HotFixID,InstalledOn,
ServicePackInEffect /format:hform

Os.htm liefert eine übersichtliche, farbig formatierte HTML-Tabelle zu allen wesentlichen Betriebssystem-Parametern (OS).
Patches.htm liefert die Übersicht der installierten Update.
Die Listen sind danach mit dem Standard-Browser bequem zu sichten.

Sie können die Infos mehrerer Klassen auch in einer Datei sammeln, indem Sie die Append-Umleitung „>>“ verwenden oder den Wmic-eigenen Parameter „wmic /append:…“. Als Ausgabeziel akzeptiert Wmic sowohl bei „/append“ als auch bei „/output“ neben einer Datei auch die Zwischenablage („wmic /output:clipboard …“).

Formatierter Output der WMIC (WMI-Console)

Sortierung mit Sortby

Sofern Sie das Ausgabeformat „Htable“ verwenden, haben Sie die zusätzliche Option, eine Tabelle nach einer bestimmten Spalte zu sortieren:

wmic sysdriver get name,pathname,startmode /format:htable:"sortby=StartMode" > drv.htm

Die „Sortby“-Option ist entgegen der sonstigen Wmic-Syntax case-sensitiv. Die Schreibweise „startmode“ im Beispiel würde daher scheitern.

————————————————————
Weitere Beispiele:

Mit dem Windows-Installer installierte Produkte auflisten:
wmic product get *
————————————————————
Software-Features auflisten (detaillierter als „Product“):
wmic softwarefeature get*
————————————————————
Software-Elemente auflisten (detaillierter als „Softwarefeature“):
wmic softwareelement get *
————————————————————
Hotfixes und Updates auflisten mit dem Alias „QFE“
wmic qfe list
————————————————————
Systemwiederherstellung konfigurieren
wmic recoveros set OverwriteExistingDebugFile = 0
wmic recoveros set SendAdminAlert = False
————————————————————
Drei Eigenschaften des Alias „Logicaldisk“ auswählen:
wmic logicaldisk get name,volumename,filesystem
————————————————————
Auflistung einiger Eigenschaften der aktuellen Prozesse mit vordefiniertem „list brief“ ­ im Ergebnis ähnlich dem Taskmanager:
wmic process list brief
————————————————————
Mit „Get“ manuell ausgewählte Eigenschaften der aktuellen Priozesse – wieder ähnlich dem Taskmanager und identisch mit „list brief“:
wmic process get ThreadCount,HandleCount,Name, Priority,ProcessId, WorkingSetSize
————————————————————
Vier wesentliche Eigenschaften der Systemdienste anzeigen:
Wmic service get caption, name, startmode, state
————————————————————
„Get“ und „Get /Value“: Breites Tabellenformat und simple Auflistung mit /Value, hier am Beispiel der User-Konten:
wmic useraccount get
wmic useraccount get /value
————————————————————
Alle Eigenschaften der Klasse „Win32_OperatingSystem“ (=Alias „os“) in HTML-Ausgabe umleiten (OS.HTM anschließend per Doppelklick laden):
wmic os get /format:hform > os.HTM
————————————————————
Alle Eigenschaften der Klasse „Win32_OperatingSystem“ (=Alias „os“) und HTML-Ausgabe – wie letzter Befehl, nur mit anderer Syntax:
wmic /output:os.HTM os get /format:hform
————————————————————
Drei Eigenschaften der Systemtreiber mit HTML-Ausgabe
Die Sortierung nach einer bestimmten Spalte mit „Sortby“ funktioniert nur mit dem breiten HTable-Format:
wmic sysdriver get name,pathname,startmode /format:htable:"sortby=StartMode" > drv.htm
————————————————————
Drei Eigenschaften der Systemtreiber, wieder mit Sortierung, hier aber mit dem simplen CMD-Filter Sort.EXE:
wmic sysdriver get name,pathname,startmode | sort /+63
————————————————————
Wmic-Ausgabe in die Zwischenablage leiten (hier Bios-Informationen):
wmic /output:clipboard bios list full
————————————————————
Instanzen von „LogicalDisk“ auf Festplatten (Typ 3) einschränken:
wmic logicaldisk where "drivetype=3" get name,freespace,SystemName,FileSystem,Size,VolumeSerialNumber
————————————————————
Set-Befehl für Registry-Größe:
wmic registry set proposedsize=20
————————————————————
Create-Befehl für eine globale Systemvariable (mit dem Namen ‚ZB‘, Wert ‚1‘):
wmic environment create name=“ZB“, username=““,variablevalue= „1“
————————————————————
Methode des Alias „Logicaldisk“, um automatisches Checkdisk zu deaktiveren:
wmic logicaldisk call ExcludeFromAutochk "E:"
————————————————————
Methode des Alias „Process“, um einen neuen Task zu erstellen:
wmic process call create "notepad.exe"
————————————————————
„Create“-Methode des Alias „Process“ lädt den ausführbaren Code eines NTFS-Streams.
Das Beispiel geht der Kürze halber davon aus, dass sich Calc.EXE im aktuellen Verzeichnis befindet:
type calc.exe > dummy.txt:calc
wmic process call create "dummy.txt:calc"

Funktioniert wahrscheinlich nur unter älterem XP.
————————————————————
Einfache Where-Filter
Das Filtern der Instanzen geschieht immer mit dem Schlüsselwort „Where“ unmittelbar nach dem Klassennamen. Die wenigsten Syntaxprobleme sind zu erwarten, wenn Sie die Filterklausel immer in doppelte, eventuelle String-Eigenschaften in einfache Anführungszeichen setzen:
Mit nachfolgendem Befehl werden aus allen Instanzen der Klasse „Process“ jene mit dem Namen „Iexplore.exe“ ausgefiltert und mit der „Terminate“-Methode beendet:
wmic process where "name='iexplore.exe'" call terminate

Einfacher Where-Filter: Von den Systemdiensten nur Eigenschaften der aktuell gestarteten Dienste auflisten:
wmic service where (state="running") get caption, name, startmode, state

Where-Filter mit logischem „UND“:
wmic datafile where "drive='c:' and extension='JPG' and filesize

Beispiel für eine-Methode, die zwingend (irgend) einen Where-Filter voraussetzt:
wmic process where "status='ok'" call shutdown

Process-Filter mit dem „Like“-Operator:
wmic process where "name like '%xplore%'" call terminate

Where-Filter mit dem „Like“-Operator (nur damit lassen sich alle Unterverzeichnisse beim Alias „Datafile“ anprechen):
wmic datafile where "drive='d:' and path like '%backup%'" call compress

Methode „SetPriority“:
wmic process where "name='winword.exe'" call setpriority 64
————————————————————

Der Einsatz weiterer Klassen jenseits der vordefinierten Aliases:
Die in den 71 als Alias vorgegebenen Klassen in Wmic sind nicht alles: Wmic kann unabhängig der vordefinierten Aliases jede weitere der mehr als 2000 Win32-Klassen ansprechen. Dies geschieht statt wie mit „wmic “ mit

wmic path ...
Die restliche Syntax ist wie bei den vorgegebenen Alias-Aufrufen: -etwa:
wmic path Win32_ServerConnection get computername,numberoffiles,username
wmic path Win32_Currenttime get /value
wmic path Win32_CodecFile get name,filename,description

Eine Übersicht der vordefinierten Aliases und ein Kozlovs WMI-Explorer zum Durchsuchen der zahlreichen WMI-Klassen finden Sie hier.
————————————————————

Weitere Beispiele und Optionen

„Get“ oder „List“ in Kombination mit dem Schalter „/Every“ – die Aktion erfolgt dann im angegebenen Sekundenintervall:

wmic cpu get loadpercentage /every:3
wmic os get FreePhysicalMemory /every:30
wmic /append:connect.htm path win32_sessionconnection get /Format:hform /every:30

Das folgende, komplexere Aufrufbeispiel kombiniert folgende Aktionen:

  • Append-Ausgabe (Anhängen an bestehende Datei)
  • Where-Filter
  • Auswahl zweier Eigenschaften mit „Get“
  • Wiederholen mit /Every
  • Formatwahl HTML

wmic /append:"c:\wmic.htm" process where "WorkingSetSize > 20000000" get name,workingsetsize /every:10 /format:htable
————————————————————
Einfache Logon-Aufzeichnung:
wmic netlogin get name,numberoflogons
————————————————————
Direkte Wmic-Auswertung auf Batch-Ebene oder Kommandozeile:
for /F "delims== tokens=1" %n in ('wmic os get serialnumber') do set sn=%n
————————————————————
Umwandlung des Wmic-Outputs in Ascii (mit Type, Sort oder Find):
wmic nicconfig get /value | type > nic.txt
————————————————————
Autostart-Check (umfasst Autostart-Ordner und Registry-Schlüssel „Run“):
wmic startup get /value
————————————————————
Eigenschaften der Netzwerkkarte auslesen
wmic nicconfig where index=1 get /value
wmic nic get index,name
————————————————————

Der /Node-Schalter
/Node: führt Wmic-Befehle auf anderen PCs aus. Die Syntax ab dem Alias (oder der „Path“ angegebenen Klasse) ist identisch mit der lokalen Anwendung von Wmic:
wmic /node: /user: /password:[Kennwort] [Befehl]
————————————————————
Shutdown-Varianten: Neustart
wmic os where "status='ok'" call reboot

Shutdown-Varianten: PC abschalten
wmic os where "status='ok'" call shutdown

Shutdown-Varianten: User abmelden
wmic os where "status='ok'" call Win32Shutdown 0

Shutdown-Varianten: Herunterfahren
wmic os where "status='ok'" call Win32Shutdown 1

Shutdown-Varianten: Neustart
wmic os where "status='ok'" call Win32Shutdown 2

Shutdown-Varianten: Herunterfahren erzwingen
wmic os where "status='ok'" call Win32Shutdown 4

Shutdown-Varianten: PC abschalten
wmic os where "status='ok'" call Win32Shutdown 8