Tags: Hyper-V, PowerShell, WMI
Hyper-V wird unter Windows Server als Rolle eingerichtet, unter Windows 8 als Feature. Es lässt sich relativ leicht herausfinden, ob der Hypervisor auf diese Weise installiert wurde. Etwas schwieriger dagegen ist es, wenn man wissen möchte, ob Hyper-V auf einem bestimmten Rechner tatsächlich läuft.
Möchte man ermitteln, ob Hyper-V auf einem PC installiert wurde, dann helfen die gängigen Tools für die Paketverwaltung. Zu diesen zählt unter anderem DISM, das mit dem Aufruf
dism /online /get-featureInfo /FeatureName:Microsoft-Hyper-V
ermittelt, ob Hyper-V installiert wurde. Die Entsprechung dazu in PowerShell ist
Get-WindowsFeature | where{$_.DisplayName -eq "Hyper-V"}
Dieser Aufruf setzt indes voraus, dass die Cmdlets für den Server Manager vorhanden sind, was entweder unter Windows Server der Fall ist oder auf einem Client inklusive RSAT. Außerdem kann man Get-WindowsFeature nur auf einen Server anwenden.
Prüfen, ob Hyper-V läuft
Diese beiden Varianten haben den Nachteil, dass sie entweder nur den lokalen Rechner abfragen können (DISM) oder nur eingeschränkt verfügbar sind, weil sie vom Server Manager abhängen. Hinzu kommt, dass der Hypervisor zwar installiert sein kann, aber vorübergehend deaktiviert wurde oder aus anderen Gründen nicht läuft.
In diesen Fällen benötigt man Alternativen, die feststellen können, ob Hyper-V aktiv ist. Eine Option ist dabei das Dienstprogramm sc.exe, weil Hyper-V als Windows-Service mit dem Namen vmms ausgeführt wird:
sc query vmms | findstr "STATE"
Dieser Befehl hat den Vorteil, dass er sich auch auf entfernte PCs anwenden lässt, wenn man als zweites Argument ihren Namen im UNC-Format angibt, also beispielsweise
sc \\remotePC query vmms|findstr "STATE"
WMI-Namespace virtualization überprüfen
Eine weitere Möglichkeit für eine derartige Abfrage bietet WMI, das sich in den verschiedenen Script-Sprachen gut verwenden lässt. Auf der Kommandozeile kann man einen entsprechenden Aufruf mit wmic formulieren:
wmic /Namespace:\\root PATH __Namespace WHERE name="virtualization"
Wenn Hyper-V nicht aktiv ist, dann existiert der Namespace root\Virtualization nicht. Auch hier kann man bei Bedarf eine Abfrage remote ausführen, wenn man den entfernten Rechner über den Parameter /node angibt.
Die Entsprechung zum obigen wmic-Befehl würde in PowerShell so aussehen:
gwmi -namespace "root" -class "__Namespace" | where{$_.Name -eq "virtualization"}
Erzeugt der Aufruf keine Ausgabe, dann läuft Hyper-V nicht.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Hyper-V Switch mit PowerShell erstellen, verwalten und löschen
- BitLocker aktivieren mit manage-bde, PowerShell oder WMI
- Programme (remote) mit PowerShell deinstallieren
- Virtuelle Maschine vollständig mit PowerShell erstellen (am Beispiel von Azure Stack HCI)
- PowerShell-Remoting, Hyper-V Manager: Fehler wegen Netzwerkverbindungstyp "Öffentlich"
Weitere Links