Tipps

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

 


 484,    01  Jun  2019 ,   Tipp
Holger Voges

  E-Mail Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

Holger Voges ist Inhaber der Firma Netz-Weise IT-Training und seit 1999 als Trainer und Consultant tätig. Als Allrounder in den Bereichen Windows Server, Active Directory, SQL Server, Hyper-V und Windows PowerShell, hat er in der Vergangenheit zahlreiche Einsätze als Consultant in namenhaften Firmen absolviert und so neben der Theorie auch umfangreiche praktische Erfahrungen gesammelt.

 

Netz-Weise

Das Haupt-Tätigkeitsfeld von Netz-Weise sind Schulungen für Profis. Bei uns bekommen Sie das Programm für den fortgeschrittenen Praktiker, der die Tiefen des Systems ausloten möchte genauso wie Standard-Schulungen.

So erreichen Sie uns:

Netz-Weise
IT-Training und Beratung
Freundallee 13a
30173 Hannover
 
Tel: (0511) 165 925-0
Fax: (0511) 165 925-99
email: info(at)netz-weise.de
 

Newsletter bestellen

Das Wichtigste kompakt ins E-Mailfach!