Windows: Die Liste der virtuellen Computer des Hyper-V Managers zurücksetzen

Der eine oder andere Hyper-V Administrator kennt das Problem: Man versucht einen virtuellen Computer zu importieren und ganz gleich ob man auswählt mit gleicher oder neuer ID, es kommt zu einem unbekannten Fehler.

In diesem Fall ist bzw. war das Problem hausgemacht. Eigentlich sollte ein bestimmter virtueller Computer auf einen anderen Datenträger verschoben werden. Die Betonung liegt dabei auf “den gesamten virtuellen Computer” (!), nicht nur dessen virtuellen Festplatten. Da man nicht wusste wie, wurde der Dienst “Hyper-V-Verwaltung für virtuelle Computer” (Dienstname: vmms) beendet und dann der gesamte Ordner des betroffenen virtuellen Computers verschoben.

Nach getaner Arbeit wurde der Dienst wieder gestartet und versucht den virtuellen Computer vom neuen Speicherort aus zu importieren. Es kam zu besagten Fehler.

Ein Lösungsweg kann sein, einfach einen neuen virtuellen Computer anzulegen und schlicht die vorhandenen virtuellen Festplatten zu verwenden. Eine weitaus drastischere Maßnahme ist das Zurücksetzen der vorhandenen virtuellen Computer des Hyper-V Manager. Für dieses Vorhaben muss man Wissen, wo die Konfiguration gespeichert ist.

In der Datei

C:\ProgramData\Microsoft\Windows\Hyper-V\data.vmcx

sind alle aktuell verwendeten virtuellen Computer hinterlegt. Leider ist diese Datei in einem binären Format und daher nicht einfach zu lesen, geschweige denn zu editieren. Es bleibt nur der Weg sie zu löschen.

Startet man nun den Dienst wieder und öffnet den Hyper-V Manager ist die Liste der virtuellen Computer leer, sofern vorher welche vorhanden waren. Nun klappt das Importieren wieder. Sind bzw. waren weitere virtuelle Computer vorhanden, müssen diese entweder importiert oder neu angelegt werden.

Quelle

Microsoft TechNet Forum – Wo steht die Konfiguration des Hyper-V Manager

4 Kommentare

  • … dieser Zweizeiler importiert alle Maschinen im angegebenen Pfad:

    $ImportPath = “c:\VMs”
    Get-ChildItem $ImportPath -Recurse -Filter “Virtual Machines” | %{Get-ChildItem $_.FullName -Filter *.vmcx} | %{import-vm $_.FullName -Register}

  • Nachtrag…. das ursprüngliche Problem, sprich das komplette Verschieben aller Maschinene in einen anderen Pfad löst dieses Script:

    $sourcePath = “F:\”
    $destinationPath = “D:\”

    (Get-ChildItem $sourcePath -Recurse | ?{$_.Attributes -ne “Directory”}).count

    Get-VM | %{

    $VM = $_

    # Check the configuration path
    $currentVMPath = $_.ConfigurationLocation

    if ($currentVMPath.StartsWith($sourcePath)) {
    $newVMPath = ($destinationPath) + ($currentVMPath.TrimStart($sourcePath))
    Move-VMStorage -VM $VM -VirtualMachinePath $newVMPath}

    # Check the snapshot path
    $currentSnapshotFilePath = $_.SnapshotFileLocation

    if ($currentSnapshotFilePath.StartsWith($sourcePath)) {
    $newSnapshotFilePath = ($destinationPath) + ($currentSnapshotFilePath.TrimStart($sourcePath))
    Move-VMStorage -VM $VM -SnapshotFilePath $newSnapshotFilePath}

    # Check the smart paging file path
    $currentSmartPagingFilePath = $_.SmartPagingFilePath

    if ($currentSmartPagingFilePath.StartsWith($sourcePath)) {
    $newSmartPagingFilePath = ($destinationPath) + ($currentSmartPagingFilePath.TrimStart($sourcePath))
    Move-VMStorage -VM $VM -SmartPagingFilePath $newSmartPagingFilePath}

    # Go over each hard drive
    $_.HardDrives | %{
    # Check the hard drive
    $currentHardDrivePath = $_.Path

    if ($currentHardDrivePath.StartsWith($sourcePath)) {
    $newHardDrivePath = ($destinationPath) + ($currentHardDrivePath.TrimStart($sourcePath))
    Move-VMStorage -VM $VM -VHDs @(@{“SourceFilePath” = $currentHardDrivePath; “DestinationFilePath” = $newHardDrivePath})}
    }

    }

    (Get-ChildItem $sourcePath -Recurse | ?{$_.Attributes -ne “Directory”}).count

  • “Move-VMStorage” verschiebt nur die VHD(X), nicht aber die komplette VM samt ihrer Konfig.-Datei oder hab’ ich etwas übersehen?

  • … ja, hast Du, Move-VMStorage -VirtualMachinePath verschiebt die Konfig-Datei.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.