Convert-WindowsImage: Windows automatisch in einer VHDX installieren

    VHD und VDHX mit Hyper-VWenn man Windows häufig in einer virtu­ellen Maschine installieren muss, dann sind die physika­lischen Deployment-Methoden relativ um­ständlich. Wesent­lich flinker geht es mit dem Script Convert-Windows­Image, sobald man einige lästige Hürden überwunden hat.

    Microsoft bot bereits für die Installation von Windows 7 in einer VHD das Script WIM2VHD, aus dem später das PowerShell-basierte Convert-WindowsImage wurde. Mittlerweile wurde es mehrmals aktualisiert, so dass es nun auch Windows 10 und Windows Server 2016 unterstützt.

    Veraltetes Script auf der TechNet Gallery

    Die Weiterentwicklung des Scripts erfolgte aber nicht auf eine konsistente Art und Weise. So nennt die Download-Seite auf der TechNet-Gallery als neues Feature die Unterstützung für Windows 10 und Server 2016. Lädt man das Script jedoch von dort herunter und versucht ein Image dieser Betriebs­systeme in eine VHD zu installieren, dann erhält man schnell die Meldung:

    ERROR: Convert-WindowsImage only supports Windows 7 and Windows 8 WIM files

    Behelfen kann man sich dadurch, dass man die Installations-ISO für Windows Server 2016 mountet und das Script von dort übernimmt (man kann dafür auch die Evaluierungskopie des Servers herunterladen). Convert-WindowsImage.ps1 findet sich unter \NanoServer\NanoServer­ImageGenerator.

    Möchte man WIM-Abbilder mit Windows 10 oder Server 2016 in eine VHD installieren, dann sollte man das Script auf einer dieser OS-Versionen ausführen oder dafür sorgen, dass man eine dazu passende Version von DISM bereitstellt.

    Script starten

    Convert-WindowsImage.ps1 definiert eine gleichnamige function, so dass man das Script erst ausführen muss, um die Funktion verfügbar zu machen. Dazu nutzt man das so genannte Dot-Sourcing, bei dem man dem Namen des Scripts einen Punkt voranstellt:

    .  .\Convert-WindowsImage.ps1

    Hat man das Script von der TechNet-Gallery heruntergeladen, weil man nur den Support für ältere Windows-Versionen benötigt, dann wird man an dieser Stelle höchstwahrscheinlich mit folgender Meldung konfrontiert:

    Führen Sie ausschließlich vertrauenswürdige Skripts aus. Skripts aus dem Internet können zwar nützlich sein, stellen jedoch auch eine potenzielle Gefahr für Ihren Computer dar.

    Lädt man das Script aus dem Internet, dann erhält man diese Warnung (außer die Execution Policy ist auf ByPass).

    Sie tritt auch dann auf, wenn man die Execution Policy für PowerShell auf unrestricted gesetzt hat, was man einfach mittels Get-ExecutionPolicy abfragen kann. Dieses Hindernis beseitigt man durch den Aufruf von

    Unblock-File <Pfad:>\Convert-WindowsImage.ps1

    GUI nicht mehr unterstützt

    Nun kann man die function mit den benötigten Angaben aufrufen. Die GUI-Option mit dem Schalter ShowUI existiert zwar weiterhin, wird aber nicht mehr unterstützt und führt bei der Auswahl einer WIM-Datei zum Fehler. Aus diesem Grund muss man sich auf die Kommandozeile beschränken.

    Die GUI-Option funktioniert in der neuen Version von Convert-WindowsImage nicht mehr

    Dabei kann man sich an der Beschreibung der Parameter in der Script-Datei orientieren, die jedoch nicht mehr auf dem neuesten Stand ist. Wie man der Deklaration der Parameter entnehmen kann, ist beispielsweise die Standardgröße der Ziel-VHD nicht mehr 40, sondern 25GB.

    UEFI vs. BIOS

    Je nachdem, ob man die VHD für eine VM der Generation 1 oder 2 verwenden möchte, muss man sich beim Parameter DiskLayout für UEFI oder BIOS entscheiden. Nimmt man hier den Wert UEFI, dann erzeugt das Script eine VHDX, andernfalls eine VHD. Mit VHDFormat kann man jedoch einen der beiden Typen erzwingen.

    Das Script benötigt außerdem Angaben zur Quelldatei, wobei es sich dabei um die Installtions-ISO oder um eine WIM-Datei handeln kann. Letztere könnte man natürlich anpassen, wenn man nicht das Standardmedium verwenden will. Beispielsweise könnte man daraus alle mitgelieferten Store Apps entfernen.

    Edition festlegen

    Convert-WindowsImage erwartet noch die Angabe für Edition, die bestimmt, welches der in einer WIM enthaltenen Images man installieren möchte. Hat man etwa die Windows-10-ISO mit Multiple Editions, dann kann man sich dort zwischen Pro und Home entscheiden. Im Zweifel findet man mit diesem Kommando heraus, welche Editionen in der WIM enthalten sind:

    dism /get-wiminfo /wimfile:p:\sources\install.wim

    Alternativ zum Namen der Edition kann man einfach den Index wählen. Bei der NanoServer.wim stünde 1 für die Standard und 2 für die Datacenter Edition. Ein Beispielaufruf könnte so aussehen:

    Convert-WindowsImage -SourcePath c:\NanoServer\NanoServer.wim -Edition 1 -VHDPath C:\NanoServer\Nano.vhdx -DiskLayout UEFI

    Da Nano Server standardmäßig keine Binaries für Rollen und Features enthält, könnte man die entsprechenden Pakete gleich über den Parameter Package hinzufügen. In meinen Versuchen schlug dies grundsätzlich mit der Meldung fehl, wonach die .cab-Datei nicht gefunden werden könne.

    Alternativ kann man die frisch erzeugte VHD mit Hilfe von Mount-DiskImage mounten und die Pakete mit Add-WindowsPackage hinzufügen. Dieses Vorgehen kann man sich ersparen, wenn man statt des Scripts das offiziell unterstützt Cmdlet New-NanoServerImage zusammen mit dem Parameter Package verwendet.

    Aufruf für Windows 10

    Möchte man hingegen die Pro Edition in 32-Bit von Windows 10 installieren, dann könnte man so vorgehen:

    Convert-WindowsImage -SourcePath $pwd\install.wim -Edition Pro -VHDFormat VHDX -VHDPath $pwd\Win10Pro.vhdx -DiskLayout BIOS

    Zu beachten ist dabei, dass man hier die function und nicht das Script aufruft, so dass man auf eine Pfadangabe oder die Endung .ps1 verzichten muss.

    Installation von Windows 10 in einer VHDX

    VHDX mit VM verbinden

    Das Installieren von Windows in einer VHDX geht innerhalb von wenigen Minuten über die Bühne. Anschließend kann man das virtuelle Laufwerk mit einer (neuen) VM verknüpfen. Das Anlegen einer virtuellen Maschine kann man ebenfalls mit PowerShell automatisieren, zuständig ist dafür das Cmdlet New-VM. Ihm kann man über den Parameter VHDPath gleich den Pfad zur eben erstellten VHDX mitgeben.

    Schaltet man die VM ein, dann bootet Windows 10 in die OOBE, in der man interaktiv die wichtigsten Einstellungen festlegen muss, so wie das bei einem frisch installierten Betriebssystem üblich ist.

    Keine Kommentare