Hyper-V: VM-Namen für Konfigurationsdatei anzeigen mit PowerShell

    Powershell-LogoWährend Hyper-V zur Bezeichnung von virtu­ellen Laufwerken die Namen der VMs verwendet, tragen die Konfigu­rations­dateien und Snapshots kryptische IDs. Mit Hilfe von PowerShell kann man relativ einfach herausfinden, welche Konfiguration bzw. welcher Prüfpunkt zu welcher VM gehört.

    Verwendet man mehrere Speicherorte für virtuelle Maschinen und möchte wissen, welche VMs wo abgelegt sind, dann ist der Blick in das Dateisystem nicht besonders aufschlussreich. Dort finden sich Konfigurationsdateien mit ellenlangen Namen, die von der ID der VM stammen.

    Die Namen der Konfigurationsdateien lassen nicht erkennen, zu welcher VM sie gehören.

    Namen und IDs für alle VMs auflisten

    Theoretisch könnte man jede XML-Datei öffnen und dort in mehreren hundert Zeilen nach dem Namen der VM suchen. Eine praktikablere Lösung besteht darin, diese Information in PowerShell über das Cmdlet Get-VM zu ermitteln:

    Get-VM | Select VMName, VMId, Path | fl

    Dieser Aufruf listet die Namen und die zugehörigen IDs aller VMs auf dem lokalen Hyper-V-Server auf. Zusätzlich zeigt er den Pfad an, unter dem die VMs gespeichert sind. Für die Abfrage eines Remote-Host ergänzt man Get-VM um den Parameter -ComputerName.

    Mit Hilfe von Get-VM kann man sich die Namen zu allen IDs anzeigen lassen.

    Möchte man nur den Namen der VM zu einer bestimmte ID erfahren, dann kann man den Aufruf von Get-VM über die Angabe des Parameters -ID einschränken:

    Get-VM -ID 73e5c323-e553-4142-9c2d-89eb1a9c2772 | Select VMName, Path

    Wenn man die Eingabe der ellenlangen GUID bzw. das Copy & Paste derselben vermeiden möchte, dann kann man alternativ folgenden Befehl verwenden, dem man nur die ersten Zeichen der GUID plus Wildcard übergibt:

    Get-VM | ? VMID -like 2DA*

    Snapshots zu VMs zuordnen

    Ein besonderer Fall sind Snapshots, für die Hyper-V eine eigene XML-Konfigurationsdatei sowie differenzielle VHD(X) anlegt. Auch hier verwendet Microsoft eine ID für den Dateinamen, allerdings nicht jene der VM, sondern eine eigene für jeden Snapshot.

    Möchte man hier ermitteln, welcher Snapshot zu welcher VM gehört, dann benötigt man das Cmdlet Get-VMSnapshot. Ruft man es mit dem Parameter ID auf, dann kann man anschließend einfach den dazu passenden Namen als Eigenschaft ausfiltern:

    Get-VMSnapshot -ID 81ec2417-29c5-4ebe-b4b9-c73f5efb9fc4 | Select VMName

    Will man einfach nur die VM-Namen zu allen vorhandenen Snapshots anzeigen, dann schickt man den Output von Get-VM durch eine Pipe an Get-VMSnapshot und filtert im Select-Statement die Eigenschaften VMName und ID aus.

    Keine Kommentare