Soeben geht ein Webcast zu Ende, der erstaunlichen Zuspruch bekommen hat. Entstanden aus einer Idee während der Technical Summit Tour 2005 wurde der Webcast erst vor 14 Tagen announced. Mit einer dreistelligen Zahl von Zuschauern konnte ich zum Schluss noch jede Menge Fragen beantworten.

Eine Frage war (wie immer): Wo kann man die Beispiele herbekommen, die ich in den Demos gezeigt habe? Klare Antwort: Ich poste sie natürlich gern auf meinem Blog.

Als erstes zeigte ich die Auflistung der Alias-Namen:

WMIC Alias GET FriendlyName, Target

Danach schauten wir etwas auf das Betriebssystem, die Inventurdaten sowie das BIOS:

WMIC OS GET /VALUE
WMIC CSProduct GET /VALUE
WMIC BIOS GET /VALUE

Das nächste Kommando gibt die vorhandene Hardware in HTML-Form aus:

WMIC /OUTPUT:ergebnis.htm PATH CIM_PhysicalElement GET  /FORMAT:hform

Nun schauten wir ein wenig auf die Hardwaredinge wie CPU, Steckkarten und Hauptspeicher:

WMIC CPU GET /VALUE
WMIC SystemSlot WHERE "SlotDesignation LIKE '%PCI%'" GET /VALUE
WMIC MemoryChip GET /VALUE

Uns interessierte dann die Klasse ComputerSystem:

WMIC ComputerSystem GET /VALUE

Wir wollen herausfinden, ob der PC in einer Domäne ist:

WMIC ComputerSystem GET Domain, PartofDomain /VALUE

Da der Computer IP-technisch völlig verkonfiguriert war, ging es im nächsten Schritt zum Netzwerkinterface:

WMIC NIC GET /VALUE
WMIC NIC GET Name, MACAddress /VALUE

Mittels der Liste der Netzwerkinterfaces ermittelte ich dann die ID der Netzwerkkarte und listete alle Eigenschaften der aktiven Netzwerkkarte auf:

WMIC NIC WHERE DeviceID!=NULL GET Index, NetConnectionID, Name
WMIC NIC WHERE DeviceID=1 GET /VALUE

Die Einstellungen selbst lassen sich dann mit dem Alias NICConfig ansehen und ändern:

WMIC NICConfig GET /VALUE
WMIC NICConfig CALL /?

Mit diesen Informationen konnte es dann losgehen. Als ersten Schritt wechselte ich die Netzwerkkarteneinstellung von statischer IP auf DHCP:

WMIC NICConfig 1 CALL EnableDHCP

Da es sich um einen Server handelt, sollte das nur eine Technologiedemonstration sein. Natürlich bekommt ein Server lieber eine feste Konfiguration:

WMIC NICConfig 1 CALL EnableStatic 192.168.100.2,255.255.255.0
WMIC NICConfig 1 CALL SetGateways 192.168.100.1
WMIC NICConfig 1 CALL SetDNSDomain contoso.com
WMIC NICConfig 1 CALL SetDNSServerSearchOrder 192.168.100.1

Vorhin hatte ich ja festgestellt, dass der Server noch in einer Arbeitsgruppe war. Also habe ich ihn im nächsten Schritt in die Domäne überführt:

WMIC ComputerSystem WHERE name!=NULL CALL JoinDomainOrWorkgroup "", 3, "contoso.com", "Passw0rd", "CONTOSO\Administrator"

Danach noch ein Reboot des Systems und der Server ist ein vollständig funktionsfähiges Mitglied der Domäne:

WMIC OS WHERE Primary=TRUE CALL Reboot

Weiterhin schauten wir dann auf weitere Einsatzgebiete, wie das Filesystem. Mit folgendem Befehl werden alle Eigenschaften der Datei c:\boot.ini ausgegeben:

WMIC DataFile "c:\\boot.ini" GET /VALUE

Neben der reinen Ausgabe der Eigenschaften kann man mit WMI auch direkt Dateien suchen und die Ergebnisse filtern. Folgender String sucht in C:\Windows\inf nach allen Dateien mit der Endung .inf, die größer als 100.000 sind:

WMIC DataFile WHERE "Drive='C:' AND Path='\\Windows\\inf\\' AND Extension='inf' AND FileSize>100000" GET /VALUE

Natürlich kann man neben Dateien auch Verzeichnisse behandeln. Diese werden über den Alias FSDir angesteuert. Anbei ein Beispiel, welches zeigt, wie man alle Unterordner des Windows-Systemordners auflisten kann:

WMIC FSDir WHERE "Drive='C:' AND Path='\\Windows\\'" GET CSName, EightDotThreeFileName

Zusätzlihe Funktionen wie Compress, Copy und Delete weckten danach mein Interesse. Die nachfolgenden Kommandos erzeugen eine Kopie der boot.ini und Komprimieren/Dekomprimieren die Datei mit NTFS-Compression. Zum Schluss wird die Datei gelöscht:.

WMIC DataFile "c:\\boot.ini" CALL copy "c:\\boot.ini.bak"
WMIC DataFile "c:\\boot.ini.bak" CALL Compress
WMIC DataFile "c:\\boot.ini.bak" CALL UnCompress
WMIC DataFile "c:\\boot.ini.bak" CALL Delete

Nicht zeigen konnte ich den Zugriff auf die Hardware. Deswegen poste ich hier Beispiele zum Zugriff auf CD-ROMs, Festplatten, Volumes und Partitionen:

WMIC CDROM GET /VALUE
WMIC CDRom GET MediaLoaded, VolumeName
WMIC DiskDrive GET /VALUE
WMIC LogicalDisc GET /VALUE
WMIC LogicalDisk GET Name, Description, VolumeSerialNumber, FileSystem, FreeSpace /VALUE
WMIC LogicalDisc CALL /VALUE
WMIC Volume GET /VALUE
WMIC Partition GET /VALUE

Auch ein Checkdisk einer Partition mit WMI sowie die Steuerung zusätzlicher Funktionen wie Festplattenbegrenzung mittels Quotas sind durchaus möglich:

WMIC LogicalDisk WHERE "Name='C:'" CALL Chkdsk
WMIC QuotaSetting GET /VALUE
WMIC DiskQuota GET /VALUE
WMIC DiskQuota SET /?

Nicht eingehen konnte ich aufgrund der fortgeschrittenen Zeit auch auf Dinge wie die Druckersteuerung:

WMIC Printer GET /VALUE
WMIC PrinterConfig GET /VALUE
WMIC PrintJob GET /VALUE

die Prozesssteuerung:

WMIC /OUTPUT:ergebnis.htm Process GET /FORMAT:hform
WMIC Process CALL Create "calc.exe"
WMIC Process WHERE Name="calc.exe" setpriority 128
WMIC Process WHERE Name="calc.exe" CALL Terminate 0

sowie die Dienstesteuerung:

WMIC /OUTPUT:ergebnis.htm Service GET /FORMAT:hform
WMIC Service "Alerter" CALL ChangeStartMode Manual
WMIC Service "Alerter" CALL StartService
WMIC Service "Alerter" CALL StopService
WMIC Service "Alerter" CALL ChangeStartMode Disabled

Ich bedanke mich bei allen Live-Teilnehmern. Mir hat es verdammt viel Spass gemacht und ein wenig auch die Lust nach mehr geweckt. Wer den Webcast leider nicht sehen konnte - er steht in Kürze zum Download zur Verfügung. Die Präsentation Scriptomania mit WMI kann als PDF direkt heruntergeladen werden.

Da die weitere Webcast-Planung schon für das erste Halbjahr des nächsten Finanzjahrs (welches bei uns ab 01.07.2005 beginnt) weitestgehend abgeschlossen ist, muss ich mal schauen, ob und wenn ja wo wir weitere Scripting-Webcasts starten können. Möglicherweise ist das ja auch ein interessanter Inhalt für einen Community Cast. Wenn jemand spezielle Themenwünsche hat - auch dafür kann man die Feedback-Funktion rechts unter diesem Blogeintrag "missbrauchen".