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
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
… 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.