# 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:

# 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).

$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

  1. Symptom: “Invalid Class” oder “Namespace not found”.

    • Ursache: Das WMI-Repository ist korrupt.
    • Lösung: winmgmt /verifyrepository. Wenn defekt: winmgmt /salvagerepository.
  2. 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.
  3. 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.


# 7. Fazit & Empfehlung

WMI/CIM ist die Lingua Franca des Windows-Managements.


# 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

# Referenzen