Microsoft hält ja große Stücke auf WMI – Cluster, Hyper-V, Server Manager, Storage Spaces und viele neue prominente Produkte funktionieren ohne WMI exakt überhaupt nicht mehr. Wenn dann WMI (vielleicht nur bei mir aber irgendwie glaube ich nicht dran) wieder mal verreckt sich aber nicht stoppen lässt ist guter Rat unbezahlbar weil WMI per Default ein shared Service ist und noch dazu in einer Gruppe mit gefühlt 800 anderen Diensten, d.h. den SVCHOST Prozess töten kann man nicht ohne den Rechner in den Abgrund zu schicken (was z.B. bei einem hochproduktiven Hyper-V Clustermember irgendwie nicht so prickelnd ist – da WMI aber im Eck ist kann man weder auf die Cluster- noch auf die Hyper-V Funktionalität zurückgreifen und z.B. die VMs wegmigrieren….).
Man kann Dienste aber auch isolieren (own statt shared process) – das war ja schon bekannt, bei WMI läuft das aber anders weil da muss man mit WINMGMT /STANDALONEHOST
die notwendigen Änderungen vornehmen und dann den Dienst neu starten (oder halt auf Reboot warten weil Restart ist so eine Sache :-D).
Damit ist WMI mal isoliert aber wie findet man es unter den 300 SVCHOSTS – vor allem weil z.B. TASKLIST /SVC
auch WMI braucht um zu funktionieren und u.U. ist ein interaktives Login auf dem Rechner nicht mehr möglich weil eine Group Policy einen WMI Filter hat (oder 1000 andere Gründe, wie gesagt WMI is everywhere)?
Sysinternals hat wieder mal das rettende Tool vor vielen Jahren für eigentlich andere Sachen gebaut (man kann sich die Sachen sicher auch anders über die Win32 API besorgen aber das ist halt fix/fertig und funktioniert soweit ichs beurteilen kann überall): ListDLLs.
Mit z.B. LISTDLLS | FINDSTR "pid Command"
bekommt man eine Liste aller Prozesse und deren Commandline, u.a. eine Commandline die mit "-k winmgmt
” endet – und das ist unser WMI Prozess (die Gruppe winmgmt entsteht durch das /STANDALONEHOST
, im Original ist das eine Gruppe die 1000 andere Dienste auch haben!).