Ein VM importieren ist eine einfache Sache. Selbst wenn die Konfiguration nicht 100%tig passt, hilft uns die GUI die nötigen Anpassungen zu machen. Nur wie geht das in der PowerShell?
Eine VM wird mit folgendem Befehl importiert (registrieren ohne kopieren):
import-vm -Path ‚D:\Hyper-V\export\org\Virtual Machines\4C91D4EB-1FCE-498F-92CD-8838AED42CE4.vmcx‘
In meinem Beispiel funktioniert dies jedoch nicht. Wir bekommen eine Fehlermeldung:
import-vm : Der virtuelle Computer kann aufgrund von Konfigurationsfehlern nicht importiert werden. Verwenden Sie „Compare-VM“, um den virtuellen Computer zu reparieren.
In Zeile:1 Zeichen:1
+ import-vm -Path ‚D:\Hyper-V\export\org\Virtual Machines\4C91D4EB-1FCE …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Import-VM], VirtualizationException
+ FullyQualifiedErrorId :
OperationFailed,Microsoft.HyperV.PowerShell.Commands.ImportVM
Die Lösung steht ja schon da, jedoch nicht wie wir diese Anwenden.
Mit folgendem Befehl werten wir die XML Datei aus und speichern die Werte (als Array) in eine Variable.
$compare = Compare-VM –Path ‚D:\Hyper-V\export\org\Virtual Machines\4C91D4EB-1FCE-498F-92CD-8838AED42CE4.vmcx‘
$compare.Incompatibilities | fl
Message : Der Ethernet-Switch „oldswitch“ wurde nicht gefunden.
MessageId : 33012
Source : VMNetworkAdapter (Name = ‚Netzwerkkarte‘, VMName = ‚org‘) [VMId = ‚4c91d4eb-1fce-498f-92cd- 8838aed42ce4‘]
Nun sehen wir welche Punkte nicht passen. Im Beispiel ist der virtuelle Switch „oldswitch“ nicht vorhanden ist.
Daher binden wir nun einen anderen Switch an. Auch wenn wie in diesem Beispiel nur ein Fehler aufgelistet wird, müssen wir diesen im Array durch [0] auswählen:
$compare.Incompatibilities[0].Source | Connect-VMNetworkAdapter -SwitchName „switch“
Ergebnis überprüfen:
(compare-VM -CompatibilityReport $compare). Incompatibilities
Wenn die Anpassung korreckt ist, bekommen wir nun kein Ergebniss ausgegeben.
Somit können wir die VM importieren. Dabei geben wir nicht die XML Datei an, sondern den angepassten Compatibility Report.
Import-VM -CompatibilityReport $compare
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status Version
—- —– ———– —————– —— —— ——-
org Off 0 0 00:00:00 Normaler Betrieb 8.0