# WMI & CIM: Die Schaltzentrale der Windows-Informationen
TL;DR / Management Summary WMI (Windows Management Instrumentation) ist die universelle Schnittstelle für Systemdaten. Ob BIOS-Seriennummer, CPU-Temperatur oder installierte Software – fast alles ist via WMI abfragbar. In modernen PowerShell-Versionen nutzen wir bevorzugt die CIM-Cmdlets (Common Information Model), da sie performanter sind, WinRM (Artikel 473) nutzen und keine DCOM-Probleme verursachen. Für einen Senior Admin ist WMI die primäre Quelle für Inventarisierung und Zustandsüberwachung.
# 1. Einführung & Architektur
Die Bibliothek des Betriebssystems.
WMI basiert auf dem CIM-Standard. Es ist hierarchisch organisiert:
- Namespaces: Container (Standard:
root\cimv2für Hardware/OS). - Classes: Die Schablonen (z.B.
Win32_Process). - Instances: Die echten Daten (z.B. der Prozess
explorer.exe).
# Architektur-Übersicht (Mermaid)
graph TD
APP[PowerShell / WAC] -->|CIM Query| CIM_SRV[CIM Object Manager]
CIM_SRV -->|Provider| KERNEL[Windows Kernel]
CIM_SRV -->|Provider| BIOS[BIOS / UEFI]
CIM_SRV -->|Provider| APPS[Applications / SQL]
subgraph "Namespaces"
ROOT[root\cimv2]
SEC[root\security]
VIRT[root\virtualization\v2]
end
# 2. Abfragen in der Praxis
Daten finden statt suchen.
# Der moderne Weg: Get-CimInstance
Vermeiden Sie das alte Get-WmiObject. CIM ist die Zukunft.
# BIOS Informationen auslesen (Seriennummer!)
Get-CimInstance -ClassName Win32_Bios | Select-Object Manufacturer, SerialNumber
# Liste aller installierten Software (aus dem Windows-Installer)
Get-CimInstance -ClassName Win32_Product | Select-Object Name, Version
# WQL (WMI Query Language)
Wie SQL, aber für den Kernel:
Get-CimInstance -Query "SELECT * FROM Win32_LogicalDisk WHERE FreeSpace < 1000000000"
# 3. Deep Dive: WMI Eventing
Der stille Beobachter.
WMI kann uns informieren, wenn sich etwas ändert (Ereignis-gesteuert).
- Anwendungsfall: Ein Script soll starten, sobald ein USB-Stick eingesteckt wird.
$Query = "SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'"
Register-CimIndicationEvent -Query $Query -SourceIdentifier "USB_Arrival" -Action { Write-Host "Hardware erkannt!" }
# 4. Day-2 Operations: Inventarisierung & Skalierung
Den Überblick behalten.
# Remote-Abfragen (WinRM)
CIM nutzt standardmäßig WinRM. Das macht Abfragen über hunderte Server extrem schnell.
$Servers = "SRV01", "SRV02", "SRV03"
Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $Servers | Select-Object PSComputerName, Caption, BuildNumber
# 5. Troubleshooting & “War Stories”
Wenn die Datenbank korrupt ist.
# Top 3 Fehlerbilder
-
Symptom: “Invalid Class” oder “Namespace not found”.
- Ursache: Das WMI-Repository ist korrupt.
- Lösung:
winmgmt /verifyrepository. Wenn defekt:winmgmt /salvagerepository.
-
Symptom: WMI-Abfragen sind extrem langsam.
- Ursache: “WMI Leak”. Ein Prozess öffnet hunderte Abfragen und schließt sie nicht.
- Lösung: Neustart des Dienstes
Winmgmt.
-
Symptom: “Access Denied” bei Remote-Abfragen.
- Lösung: Prüfen Sie die DCOM-Berechtigungen und die Firewall-Regeln für “WMI-Verwaltung”.
# “War Story”: Der “Zombie” Prozessfinder
Ein App-Server fraß RAM, aber der Task Manager zeigte keine auffälligen User-Prozesse.
Die Entdeckung: Eine WMI-Abfrage auf Win32_Process im Namespace root\cimv2 zeigte hunderte Prozesse ohne “Parent Process ID”. Diese Prozesse waren im Task Manager unsichtbar (Zombies).
Ursache: Ein veralteter Monitoring-Agent spawnete Prozesse, beendete sie aber nicht sauber.
Lehre: WMI sieht Dinge, die die GUI verschweigt. Vertrauen Sie den Rohdaten!
# 6. Monitoring & Reporting
Daten für das Dashboard.
# WMI Exporter
Nutzen Sie den windows_exporter für Prometheus. Er nutzt intern WMI-Aufrufe, um Daten zu sammeln.
- KPI:
windows_os_info(Versionen). - KPI:
windows_cpu_temperature_celsius(Falls Hardware-Provider vorhanden).
# 7. Fazit & Empfehlung
WMI/CIM ist die Lingua Franca des Windows-Managements.
- Empfehlung: Nutzen Sie CIM-Cmdlets für alle neuen Skripte.
- Tool-Tipp: Installieren Sie den WMI Explorer (z.B. von Vinay Pamnani), um die Klassen und Namespaces visuell zu durchsuchen.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Klassen suchen | Get-CimClass -ClassName *network* |
| Methodensuche | (Get-CimClass Win32_Process).CimClassMethods |
| Methode ausführen | Invoke-CimMethod -ClassName Win32_Process -MethodName Create ... |
| Repository Check | winmgmt /verifyrepository |