Aus einer Windows Hyper-V VM den Host auslesen
Ich hatte vor 2 Tagen das Problem, das ein Server im Monitoring einen Alarm auslöste, aber nicht klar war, ob das Problem an der VM, einer Applikation oder dem Hyper-V-Host liegt. Da ich die VM in den üblichen Hyper-V-Clustern nicht finden konnte, wollte ich herausfinden, auf welchem Host die VM läuft.
Dazu gibt es mehrere Wege. Einmal per Registry, einmal lokal am System per PowerShell-Script oder auch von einem Remotecomputer, der entsprechend die VM erreichen kann.
Per Registry ist mir persönlich zu lästig, ich klicke mich nicht so gerne durch, aber der Vollständigkeit halber die regedit öffnen und sich durch diese dann durchklicken:
HKEY_LOCAL_MACHINE\Software\Microsoft\Virtual Machine\Guest\Parameters
Dort unter PhysicalHostNameFullyQualified bzw. PhysicalHostName.
Einfach ein Script erstellen, entweder am lokalen System und auf das entsprechende System kopieren oder gleich dort in der PowerShell ISE ausführen:
$RegPath="HKLM:\Software\Microsoft\Virtual Machine\Guest\Parameters"
$reg=Get-ItemProperty $RegPath
write-Host "Host:" $reg.PhysicalHostNameFullyQualified
Wenn man das Script auf einem System erstellt, das auch die Rechte hat, auf die VM zuzugreifen, kann man auch per Remote den folgenden Befehl, sofern das Script abgespeichert ist, ausführen. Und zwar mit dem folgenden Befehl:
Invoke-Command -computer supersystem.example.com c:\temp\ps-scripts\scriptname.ps1
Zu guter Letzt, das Problem lag an einer Abfrage in der Applikation. Ich wollte nur sichergehen, dass es definitiv nicht wegen eines Timeouts wegen einer Überlastung passiert, da der Fehler nicht permanent auftauchte. Ich bin mir auch dessen bewusst, dass man dieses Script mit Sicherheit vereinfachen könnte, allerdings muss ich auch gestehen, der PowerShell Guru bin ich aktuell nicht. Das geht mit Sicherheit auch als Einzeiler.