OVA und OVF in Hyper-V importieren mit PowerShell


    Tags: , , ,

    OVA nach Hyper-V konvertierenOpen Virtual Appliance (OVA) und Open Virtua­lization Format (OVF) haben sich als Stan­dard für den Aus­tausch von virtu­ellen Maschinen zwischen Hyper­visoren etabliert. Hyper-V bietet aber keinen Import für derartige virtuelle Appliances. Mit PowerShell lässt sich dieser Vor­gang teil­weise automa­tisieren.

    Während VMware und VirtualBox das unkomplizierte Exportieren und Importieren von VMs als OVA schon lange erlauben, sieht Microsoft bei Hyper-V dafür offenbar keinen Bedarf. Die bisher einzigen Tools aus Redmond ergänzen den System Center VMM 2012 um die Fähigkeit zum OVA-Import.

    Konvertieren der virtuellen Laufwerke

    Nachdem es sich bei OVA nur um ein ZIP-Archiv handelt, das die virtuellen Laufwerke sowie eine .ovf-Datei enthält, kann man sich zumindest selbst behelfen. In der Regel wird es für den Import notwendig sein, die virtuellen Festplatten aus den Formaten VMDK oder .vdi nach VHD(X) zu konvertieren.

    Export eines virtuellen Laufwerks aus VirtualBox im VHD-Format

    Dafür benötigt die VirtualBox kein externes Werkzeug, weil sie über die Kopieren-Funktion des Managers für virtuelle Medien auch VHDs exportieren kann. Ansonsten empfehlen sich für diese Aufgabe entweder der grafische StarWind Converter oder qemu, beides kostenlose Programme.

    Neue VM braucht die Einstellungen aus der .ovf-Datei

    Nach der Umwandlung der virtuellen Laufwerke könnte man nun manuell eine neue VM in Hyper-V anlegen und diese mit der konvertierten VHD(X) verbinden. Allerdings müsste man dann raten, wie viele CPUs die VM benötigt oder wie groß der Arbeits­speicher dimensioniert sein sollte. Außerdem weiß man nicht, ob das Laufwerk mit GPT oder MBR partitioniert wurde und somit BIOS oder UEFI gefragt ist.

    Die Angaben zu RAM und CPUs finden sich in der .ovf-Datei im Abschnitt VirtualHardwareSection.

    All diese Informationen über eine VM bringt eine Open Virtual Appliance in der .ovf-Datei mit. Sie liegt als XML vor, so dass man die Einstellungen mit Hilfe der XML-Funktionen von PowerShell auslesen kann. Erschwert wird dies allerdings dadurch, dass mehrere Versionen davon im Umlauf sind und Hersteller das Format durch eigene Namespaces erweitern können.

    Werte für CPUs, RAM, Controller

    Grundlegende Einstellungen wie CPUs, RAM, UEFI bzw. BIOS, SCSI-Controller oder DVD-Laufwerke lassen sich aber relativ verlässlich ermitteln. Wenn man diese Werte in Variablen zwischenspeichert, ist es nachher ein Leichtes, auf ihrer Basis mit PowerShell eine neue VM zu erzeugen.

    Das folgende Script liest die Einstellungen aus der .ovf-Datei in eine Hash-Tabelle ein. Den Namen der OVF muss man im ersten Schritt natürlich anpassen. Am Ende gibt es die Liste der gefunden Konfigurationen aus, damit man diese auf Plausibilität prüfen kann.

    Bevor man einen neue VM anlegt, sollte man die ermittelten Einstellungen prüfen.

    Dazu gehört etwa, dass das Gast-OS für eine VM der Gen 2 geeignet sein sollte. VMware und VirtualBox können nämlich auch ältere Windows-Versionen in einer UEFI-VM ausführen. Hyper-V benötigt dafür aber mindestens Windows 8.1 oder Server 2012 R2.

    Wie man schnell sieht, trifft das Script gleich am Anfang eine Fall­unter­scheidung zwischen VMware und VirtualBox, um bestimmte Ein­stellungen an unterschiedlichen Orten auszulesen.

    Sehen die gefundenen Werte gut aus, dann kann man im nächsten Schritt das folgende Script starten, um die neue VM zu erzeugen. Dafür benötigt es die Variable $VM aus dem ersten Script, die aber noch verfügbar sein sollte, solange man sich in der gleichen PowerShell-Sitzung befindet.

    Die neue VM sollte nun nach den Vorgaben aus der .ovf existieren.

    Manuelle Anpassungen

    Als manuelle Nacharbeit bliebe dann, die VM mit dem konvertierten Laufwerk zu verbinden. Nachdem sich dessen Dateiname ändert, die Extension entweder .vhd oder .vhdx sein kann und es nicht im Standardpfad liegen muss, wäre die Anbindung mittels Script relativ umständlich. Wenn man sich hier auf bestimmte Vorgaben festlegt, könnte man das aber leicht nachrüsten.

    Außerdem kann man davon ausgehen, dass sich im Vergleich zur Umgebung, aus der die OVA exportiert wurde, die Netzwerk­konfiguration ändert. Dazu zählt unter anderem der Name des virtuellen Switches. Außerdem bietet Windows erst ab der Version 10 1709 und Server 1709 einen eigenen NAT-Switch, so dass auf älteren Versionen eine NAT-Konfiguration sich nicht ohne Weiteres importieren lässt.

    Aus diesem Grund verzichten die Scripts darauf, die Netzwerk­einstellungen aus der .ova-Datei auf die neue virtuelle Maschine zu übernehmen.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links