Mit Bordmitteln von Windows ist es möglich, auf Wunsch sogar ohne ADK, eine bootfähige VHD(X) aus einem WIM zu erstellen. So lassen sie z.B. Installationsmedien vorbereiten, WinRE- oder WinPE-Medien für Rettungs- oder Installationszwecke erstellen.

Anbei ein Beispiel wie man das Windows Recovery Enviroment (WinRE, aka Wiederherstellungslaufwerk) auf diese Weise statt auf einen USB-Stick auf eine VHD(X) schreibt, die man unter Hyper-V oder VirtualBox nutzen kann. Als Ausgangsbasis dient ein virtualisierter Windows Server 2019 Standard mit GUI. Die beschriebenen Schritte funktionieren ebenfalls mit anderen Windows-Editionen als auch -Versionen.

Winre.wim verfügbar machen

Das Abbild von WinRE liegt in der “System-reserviert”-Partition des Startlaufwerks. Per Standard hat diese weder einen Laufwerksbuchstaben und zudem ist der Inhalt versteckt.

Folgende Befehle in einer Eingabeaufforderung mit erhöhten Rechten ausführen.

Laufwerksbuchstaben zuweisen:

diskpart
select disk 1
list volumes
select volume 1 <- Im Regelfall ist das erste Volume die "System-reserviert"-Partition
assign letter=Bexit

Attribute entfernen:

attrib -s -h B:\Recovery\WindowsRE\Winre.wim

Winre.wim kopieren:

copy B:\Recovery\WindowsRE\Winre.wim C:\Temp

Bemerkung: Man kann sich das Kopieren mitunter sparen, wenn man allerdings nicht direkt mit der Original-Datei arbeiten möchte, ist dieser Schritt zu empfehlen.

Tipp: Anpassungen kann man später direkt in der VHD(X) vornehmen, da dort kein WIM vorhanden ist. Damit entfallen so manche Schritte oder werden leichter im Gegensatz zum Bearbeiten von WIM-Dateien.

VHD(X) vorbereiten

Es wird eine zuvor erstellte und eingehängte VHD(X) benötigt, diese kann man per diskpart oder in der Datenträgerverwaltung erstellen und anfügen. Die notwendigen Schritte werden in diesem Beitrag nicht beschrieben. Wie es mittels diskpart funktioniert kann man in der Quelle nachlesen. Für WinRE sollte die VHD(X) min. 2.5 GB (2500 MB) groß, mit NTFS formatiert und die Partition als aktiv markiert sein. Mit weniger Kapazität kam es während des Tests immer wieder zu Abbrüchen, da nicht genügend Speicher vorhanden wäre. Etwas Puffer falls man eigene Anpassungen, Treiber oder Programme hinzufügen möchte kann zudem nicht Schaden.

WIM auf VHD(X) schreiben

Bei WinRE ist es einfach, da nur ein Abbild in der WIM-Datei enthalten ist:

dism /apply-image /imagefile:c:\temp\winre.wim /index:1 /applydir:w:\

Gibt es mehrere Abbilder kann man mit

dism /Get-WimInfo /wimfile:d:\sources\install.wim

die richtige Index-Nummer ermitteln.

VHD(X) bootfähig machen

Damit die VHD(X) bootfähig wird, muss der entsprechende Startsektor und die notwendigen Dateien geschrieben werden:

bcdboot W:\Windows /s W:

Nun kann man die VHD(X) aushängen und in einer virtuellen Maschine verwenden.

Optional: Anpassungen vornehmen

Wie weiter oben erwähnt, ist es bei dieser Heransgehensweise nicht zwingend notwendig, in der WIM-Datei etwaige Anpassungen vorzunehmen.

Vielmehr und imho viel einfacher geht das direkt in der VHD(X), wenn man diese einhängt oder sogar während der Laufzeit der WinRE- bzw. WinPE-Umgebung. Soll heißen: Schreibt man z.B. Ordner oder Dateien während der Ausführung innerhalb der VHD auf eben selbige, bleiben diese auch über einen Neustart hinaus erhalten. Es verhält sich also nicht so wie mit der RAMDISK wenn man via ISO arbeitet. Das eröffnet viel Raum für Änderungen. Anbei Beispiele für das Anpassen und der Anwendung der WinRE- bzw. WinPE-Umgebung:

Shell

Damit nicht immer das Recovery Enviroment startet, kann man simple die beim Boot aufgerufene Shell ersetzen. Als einfachstes Beispiel wird durch die nachfolgende Änderung stattdessen die Eingabeaufforderung gestartet:

  • Die Datei “W:\Windows\System32\winpeshl.ini” editieren.
  • Bei “AppPath=”X:\Windows\System32\cmd.exe” eintragen.

Möchte man die Änderung direkt während WinRE/WinPE läuft ausführen, dann statt den Laufwerksbuchstaben “W:” “X:” verwenden.

Achtung: Beendet man die so gestartete Eingabeaufforderung, startet WinRE/WinPE neu!

Randnotiz: In der Ursprungs-WinRE steht bei AppPath “X:\sources\recovery\recenv.exe”

Tipp: (Aus-)Kommentieren geht natürlich auch:

;AppPath "X:\sources\recovery\recenv.exe"
AppPath="X:\Windows\System32\cmd.exe"

Netzwerk

Der Netzwerk-Stack wird mit

wpeutil initializenetwork

gestartet. Sofern DHCP zum Einsatz kommt, erhält man automatisch eine IP-Adresse und kann anschließend mit ping, net use usw. arbeiten.

Herunterfahren und Neu starten

Heruntergefahren wird mit

wpeutil shutdown

Ein Neustart wird mit

wpeutil reboot

ausgeführt.

Drive Snapshot

Sozusagen der Klassiker bei meinen WinRE/WinPE-Projekten darf natürlich nicht fehlen. Selbstverständlich lässt sich Drive Snapshot in der 64-bit Variante (snapshot64.exe) ohne Probleme ausführen. Man kann zudem die bereits bekannten Skripte und Anpassungen aus früheren Beiträgen verwenden.

Quelle:

Assistanz – Blog – Steps to Create Bootable VHD on Hyper-V