WMIC

WMI (Windows Management Instrumentation) ist eine Programmierschnittstelle, mit der viele Aspekte von Windows-Betriebssystemen erfasst werden können. Dies reicht von der Hardware, über Betriebssystemeinstellungen, Performancedaten bis hin zu installierten Applikationen. Es können nicht nur Werte ausgelesen, sondern auch geändert und Methoden ausgeführt werden. WMI ist so etwas wie das Schweizer Messer der Windows-Administration.

WMI stand bisher nur Programmierern in Programmiersprachen wie C++, Visual Basic, VBScript usw. zur Verfügung. Es waren also zumindest Kenntnisse einer Script-Sprache erforderlich. Administratoren, die keine Script-Sprache beherrschten, waren von der Nutzung von WMI ausgeschlossen.

Dies änderte sich in Windows XP. Mit der WMI Console (kurz WMIC) wurde ein Kommando-Interpreter eingeführt, der auf relativ einfache Weise Befehle an WMI übergeben kann. Damit haben Administratoren erstmals die Möglichkeit, die meisten Funktionen von WMI zu nutzen, ohne gleich ein Script schreiben zu müssen. Die WMIC kann zwar nur von Windows XP und Windows Server 2003 aus verwendet werden, Sie können damit aber auch Systeme ab Windows 98 und Windows NT 4.0 aufwärts verwalten, soferne auf diesen der WMI-Dienst installiert ist. Standardmäßig ist WMI ab Windows 2000 installiert.

Zur Nutzung der WMIC sind administrative Berechtigungen auf dem lokalen Computer erforderlich. Die WMIC kann in zwei Modi ausgeführt werden, dem interaktiven Modus und em Batchmodus. Egal welchen Modus Sie verwenden: Beim ersten Aufruf muss die WMIC erst installiert werden. Die geschieht allerdings vollautomatisch und ohne weitere Rückfragen.

Interaktiver Modus

Für Anfänger ist der interaktive Modus ideal. Starten Sie die WMIC einfach durch Eingabe des Befehls WMIC. Es erscheint ein Prompt und sie können WMIC-Befehle direkt ausführen und erhalten auch unmittelbar deren Ergebnis.

Batchmodus

Der Batchmodus ist für die Ausführung einzelner Befehle für erfahrene Benutzer oder auch für die Nutzung der WMIC in Batch-Dateien ideal. Man schreibt dazu direkt hinter WMIC den eigentlichen Befehl, z. B. WMIC PATH Win32_OperatingSystem GET /VALUE.


WMI
(Windows Management Instrumentation)

unterstützt von:
NT4.0+SP4, Windows 2000, Windows XP, Windows 2003

WMIC

Konsole, dient zur vereinfachten Verwendung von WMI
unterstützt von: Windows XP, Windows 2003

Klassen

Objekt das Eigenschaften besitzt (zB: Win32_Processor)
 

Instanzen

Objekte können keine, eine oder mehrere Instanzen besitzen (in Analogie des Performancemonitors) zB mehrere CPUs

Alias

Klassen haben „lange“ Bezeichnungen und meist einen Alias der die Verwendung übersichtlicher gestaltet
(zB der Alias der Klasse Win32_Processor lautet schlicht: CPU)

Befehle

dienen zur Abfrage bzw. zum Ändern oder Manipulieren der Eigenschaften einer Klasse

GET

Zeigt alle oder einzelne Eigenschaften einer Klasse an
zB GET /Value (alle) oder GET Name,SID (nur 2)

LIST

alle oder eine vordefinierte Anzahl von Eigenschaften anzeigen
LIST /Full bzw LIST /Brief (nicht so flexibel wie GET)

SET

Einige (nicht alle) Klassen lassen das Ändern von einigen Eigenschaften zu (zB Prozesspriorität auf hoch setzen)

CALL

über CALL können Methoden (Befehle) an Klassenobjekte gesendet werden: zB: den PC rebooten oder Programme ausführen

CREATE

meist zum erstellen von Systemvariablen verwendet
 

Syntaxelemente
 

 

/NODE:
/USER: und /PASSWORD:
/FAILFAST

dient zum Remotezugriff auf andere Recher
NODE … Name des Remoterechner
sendet ein PING vor dem Zugriff um zu sehen ob das Ziel online ist

/OUTPUT:

Ergebnis in eine Datei umleiten.
wmic /output:qfe.htm qfe /format:htable
wmic qfe /format:htable > qfe.htm (liefert das selbe Ergebnis)

/FORMAT:htable
/FORMAT:hform

Ausgabeformat als HTML-Tabelle oder HTML-Report (eigentlich nur sinnvoll mit dem Umleiten in eine Datei (siehe oben)

WHERE

dient zum Filtern bzw. zum auswählen einer Instanz
zB wmic process where "name='iexplore.exe'" call terminate
Anführungszeichen beachten!

LIKE

neben „=“ „<“ „>“ „<>“ein weiterer logischer WHERE-Operator
  zB: wmic process where "name LIKE '%xplore%'" call terminate

/EVERY:n

Auftrag alle n Sekunden wiederholen. Funktioniert mit GET & LIST zB: wmic os get FreePhysicalMemory /every:30

PATH

verwendet man KEINEN Alias muss das Klassenobjekt mit PATH angesprochen werden
wmic PATH Win32_Processor get loadpercentage
(statt: wmic cpu get loadpercentage)

Nicht alle Klassen, Eigenschaften und Operatoren sind in NT und Windows 2000 verfügbar!

Beispiele in einem CMD-Fenster eingeben: 

GET und LIST

 

wmic process get

Alle Eigenschaften über Prozesse anzeigen (unübersichtlich)

wmic process get /value

Alle Eigenschaften über Prozesse untereinander anzeigen (schon besser)

wmic process get name

Nur den Namen aller Prozesse anzeigen (einzelne Eigenschaft)

wmic process list

ähnlich get /value

wmic process list brief

entspricht: wmic process get Thread,Count,HandleCount, Name,Priority,ProcessID,WorkingSetSize

wmic poduct get name,vendor

Name und Hersteller von mit dem Windows-Installer installierter Software

wmic output:os.htm os get /format:hform

Ausgabe vom Typ „hform“ als HTML-Datei namens os.htm

wmic sysdriver get name,pathname,startmode /format:htable: „sortby startmode“ >drv.htm

Ausgabe „DOS-mässig“ in die Datei drv.htm in Tabellenform umleiten. Angezeigt werden Informationen über Systemtreiber sortiert nach dem Startmode.

SET

Ändern von Eigenschaften

wmic registry set proposedsize=20

Größe der Registry auf 20MB begrenzen

CREATE

 

wmic environment create name=“ZB“,username=“<SYSTEM>“,variablevalue=“1“

setzen und löschen von globalen Systemvariablen

CALL

Aufruf von Methoden

wmic logicaldisk call ExcludeFromAutochk „E:“

Laufwerk E: vom automatischen Checkdisk bei Start ausnehmen

wmic process where "name='iexplore.exe'" call terminate

Mit Hilfe der WHERE-Klausel eine spezielle Instanz von Prozess auswählen und diese beenden

Nützliche Beispiele

 

wmic qfe get /format:htable > qfe.htm 

installierte Hotfixes in Tabellenform anzeigen

wmic /NODE:“London“ /USER:nwtraders\dieter PATH Win32_TerminalServiceSetting WHERE Servername=“London“ CALL SetallowTSConnections 1

Erlauben auf London eine Remotedesktop-Verbindung herstellen zu können

wmic /node:PC1 product call install true, „“,“\\London\inst\blue.msi“

Software remote auf PC1 installieren
Achtung PCs müssen in selben Domäne sich befinden und PC1 muss im AD eingestellt haben „Computer zu Delegierungszwecken vertrauen“ sonst liefert der Aufruf einen Fehler 1619

wmic /node:PC1,PC2 product „Blue“ call uninstall

Software „blue“ remote von PC1 und PC2 deinstallieren
hier wird muss nicht zu Delegierungszwecken vertraut werden


Beispiele:

  • Auflistung der vorhandenen Treiber
    wmic sysdriver get name

  • Auflistung der vorhandenen Treiber: zeigt, dass "list instance" in diesem Fall gleichbedeutend ist mit "get name":
    wmic sysdriver list instance

  • 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 

  • 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="<SYSTEM>",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" 

  • Beispiel für die Fähigkeit der "Create"-Methode des Alias "Process", ausführbaren Code eines NTFS-Streams zu laden. 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" 

  • Einfacher Where-Filter: Aus allen Instanzen des Alias "Process" wird/werden jene/r 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 

  • Filter mit logischem "UND":
    wmic datafile where "drive='c:' and extension='JPG' and filesize<10000" call delete 

  • Beispiel für einfachen Filter (nur tatsächlich gestartete Treiber):
    wmic sysdriver where "started=true" get name,pathname 

  • Process-Methode mit "UND"-Filter:
    wmic process where "name='explorer.exe' and workingsetsize>30000000" call terminate 

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

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

  • Datafile-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 

  • Einsatz weiterer Klassen jenseits der vordefinierten Aliase:
    wmic path Win32_ServerConnection get computername,numberoffiles,username
    wmic path Win32_Currenttime get /value
    wmic path Win32_CodecFile get name,filename,description 

  • "Get/List"-Schalter "/Every:<n>" (Aktion erfolgt alle <n> Sekunden):
    wmic cpu get loadpercentage /every:3
    wmic os get FreePhysicalMemory /every:30
    wmic /append:connect.htm path win32_sessionconnection get /Format:hform /every:30
     

  • Komplexer Aufruf:
    - 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 

  • 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 

  • /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:<Rechner oder IP-Adresse> /user:<Benutzername> /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