Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
2 Minuten Lesezeit (423 Worte)

Fehlende virtuelle Switche für Hyper-V VMs ermitteln und automatisch anlegen

Wenn eine virtuelle Maschine in Hyper-V von einem Host auf einen anderen per Import übertragen werden soll, müssen alle virtuellen Switche, an die die Maschine auf dem Quellhost angeschlossen war, auf dem Zielhost existierten. Existieren bedeutet in diesem Fall, dass ein Switch mit identischem Namen vorhanden sein muß. Ist das nicht der Fall, quittiert Hyper-V den Import mit einer Fehlermeldung:

Es ist ein Fehler beim Import aufgetreten
Der virtuelle Computer kann aufgrund von Konfigurationsfehlern nicht importiert werden. Verwenden Sie "Compare-VM", um den virtuellen Computer zu reparieren

Compare-VM ist ein Powershell-Kommando, dass zusammen mit dem Hyper-V Modul ausgeliefert wird, und das vor dem Import angewendet werden kann, um zu prüfen, ob es Probleme bei der Konfiguration gibt. Dafür pipen Sie das vmcx-File der virtuellen Maschine einfach in Compare-VM. Man erhält dann ein Rückgabeobjekt mit den Konfigurationsdetails der VM:

PS > Dir M:\Hyper-V\LON-AP1\Virtual Machines\4C9790D7-48CD-4D31-8BA2-02D8C9C245AE.vmcx | compare-VM

CheckpointPath     : M:\Hyper-V\LON-AP1\Snapshots
VM                 : VirtualMachine (Name = 'LON-AP1') [Id = '4c9790d7-48cd-4d31-8ba2-02d8c9c245ae']
OperationType      : ImportVirtualMachine
Destination        : R1WS3
Path               : M:\Hyper-V\LON-AP1\Virtual Machines\4C9790D7-48CD-4D31-8BA2-02D8C9C245AE.vmcx
SnapshotPath       : M:\Hyper-V\LON-AP1\Snapshots
VhdDestinationPath : M:\Hyper-V\LON-AP1\Virtual Hard Disks
VhdSourcePath      :
Incompatibilities  : {33012}

Interessant ist hier die Eigenschaft Incompatibilities, denn Sie zeigt, welche Konfigurationen nicht mit dem Zielhost kompatibel sind. Incompatibilities ist ein Objekt.

PS > $VM = Dir M:\Hyper-V\LON-AP1\Virtual Machines\4C9790D7-48CD-4D31-8BA2-02D8C9C245AE.vmcx | compare-VM
PS > $VM.Incompatibilities

Message                                                      MessageId Source
-------                                                      --------- ------
Der Ethernet-Switch "External Network" wurde nicht gefunden.     33012 VMNetworkAdapter (Name = 'Network Adapter', VMName = 'LON-AP1') [VMId = '4c9790d7-48cd-4d31-8ba2-02d8c9c245ae']

Hier sieht man, dass die Message-ID 33012 bedeutet, dass ein virtueller Switch nicht vorhanden ist, und wie dieser heißen muß. Mit diesen Daten ist es jetzt nicht mehr schwer, mit Hilfe eines regulären Ausdrucks den Switchnamen aus der Fehlermeldung zu extrahieren. Das folgende kleine Skript erledigt das für alle virtuellen Maschinen in einem Quellordner:

$VMFolder = "M:\Hyper-V"
$SwitchNameFilter = '"(.*)"'
$MessageList = get-Childitem -path $VMFolder -Include '*.vmcx' -Recurse |
    Compare-VM |
    Where-Object { $_.Incompatibilities.MessageID -eq "33012" } |
    select @{name="Message";expression={ $_.Incompatibilities.Message }}
$SwitchNames = Foreach ( $Message in $MessageList )
{
    $null = $message -match $SwitchNameFilter
    $matches[1]
}
$SwitchNames | Select-Object -Unique

Wenn Sie noch mit Windows Server 2012 (R2) arbeiten, kommen Sie ohne Compare-VM aus, da Server 2012 und 2012R2 die Konfiguration noch in einer leicht einlesbaren XML-Datei gespeichert haben. Hier verwenden Sie statt eines regulären Ausdrucks einfach eine Xpath-Abfrage:

$VMFolder = "M:\Hyper-V"
$VmConfigFiles = get-Childitem -path $VMFolder -Include '*.vmcx' -Recurse | Where-Object { $_.Fullname -NotLike "*Snap*" }
$SwitchNames = Foreach ( $Config in $VmConfigFiles )
{
    [xml]$config = Get-Content -Path $vm -Raw
    (select-xml -xml $config -XPath '//AltSwitchName').node.'#text'
}
$SwitchNames | Select-Object -Unique

 

Den Datenträgertyp (SSD,HDD) per Powershell und WM...
Eine MAC-Adresse unter Windows oder Windows PE aus...

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Montag, 20. Mai 2024

Sicherheitscode (Captcha)