PXElinux 6.04-pre1/iPXE 1.21.1 – Windows 10 ADK 22H2 WinPEs erstellen

Anmerkung:
Dies ist eine weiterführende Anleitung zu meinem Grundgerüst, basierend auf dem nachfolgenden Artikel:

PXE&TFTP&DHCP Server einrichten

In diesem Artikel geht es um das Erstellen von Windows 10 WinPE-Images, die sowohl über BIOS, als auch UEFI gestartet werden können. In meinem direkten Beispiel wird dies im BIOS-Modus über PXELinux mit Verweis auf den Windows-Boot-Manager geregelt oder optional durch das Tool Memdisk.
Beides sind Varianten, die ohne Probleme funktionieren. Im UEFI-Modus wird dann ein iPXE Skript verwendet.

Aktualisiert – 26.08.2023:

  • ADK-Paket wurde aktualisiert.
  • Intel Treiber Paket auf Version 28.2 aktualisiert

Download: W10 ADK-Paket (Erstellt von Stefan Saft)

 

Bevor wir anfangen, möchte ich anmerken, dass dies eine sehr lange Anleitung wird. Es wäre vielleicht nicht verkehrt, sich noch einen Kaffee zu machen und nochmal kurz durchzuatmen.

Voraussetzungen:

Was brauchen Sie alles, damit Sie auch ein WinPE in aktuellster Version erstellen können?

Ein aktuelles Windows 10:

Ihr System, worüber Sie die WinPEs erstellen wollen, muss ein aktuelles Windows 10 Build 22H2 sein. Welche Version Sie haben, können Sie prüfen, wenn Sie unter Windows die Eingabeaufforderung öffnen und:

winver

eingeben.

Windows 10 Version 2009/20H2 Informationsbildschirm
Windows 10 Version 2009/20H2 Informationsbildschirm

Es gäbe natürlich die Möglichkeit, dass auch mit älteren Windows Versionen machen zu können, allerdings wollen Sie doch, dass Sie mit der aktuellsten Version auch alle Windows Versionen installieren lassen könnten, oder? Sollten Sie nicht das Build 22H2 haben, wird der nächste Schritt in dieser Anleitung fehlschlagen. Daher updaten Sie zuerst über die Windows Update Funktion Ihr Windows 10 auf den aktuellsten Stand der Dinge.

Hinweis: Es gibt für die aktuelle 22H2 Version keine separate ADK oder WinPE Version!

Windows 10 ADK Build 2004 Download und Installation:
Des Weiteren laden Sie sich auf der Microsoftseite die aktuellste Windows 10 ADK Build 2004 Version für Ihr Betriebssystem herunter.

Klicken Sie unten auf

Windows ADK für Windows 10, Version 2004, herunterladen

Kopieren Sie diese Datei an einen beliebigen Ort und starten Sie dann die adksetup.exe. Wundern Sie sich nicht, das die Datei nur knappe 2 MB groß ist, denn das ist ein Onlineinstaller. Es werden etliche GB aus dem Internet heruntergeladen werden müssen. Während dem Setup ist es ratsam, alle Dateien für einen anderen Rechner herunterzuladen als Installationsmethode zu wählen, denn dann haben Sie diese Dateien alle und müssten diese nicht erneut herunterladen, wenn Sie das auf einem anderen Rechner ebenfalls einrichten wollten.

Die heruntergeladenen Pakete speichert die adksetup.exe in den selbst angelegten “Installers” Ordner.
Die “UserExperienceManifest.xml” Datei gehört ebenfalls dazu!

Rufen Sie im Anschluss die adksetup.exe auf und wählen Sie den Punkt Bereitstellungstools aus. Klicken Sie auf Installieren. Dieser Prozess kann nun je nach Ihrer Internetanbindung eine ganze Ecke dauern.

Windows 10 ADK Build 2004 WinPE Download und Installation:
Des Weiteren laden Sie sich auf der Microsoftseite die aktuellste Windows 10 ADK Build 2004 WinPE Version für Ihr Betriebssystem herunter.

Klicken Sie unten auf

Windows PE-Add-On für das ADK, Version 2004, herunterladen

Kopieren Sie diese Datei an einen beliebigen Ort und starten Sie dann die adkwinpesetup.exe. Wundern Sie sich nicht, das die Datei nur knappe 2 MB groß ist, denn das ist ein Onlineinstaller. Es werden etliche GB aus dem Internet heruntergeladen werden müssen. Während dem Setup ist es ratsam, alle Dateien für einen anderen Rechner herunterzuladen als Installationsmethode zu wählen, denn dann haben Sie diese Dateien alle und müssten diese nicht erneut herunterladen, wenn sie das auf einem anderen Rechner ebenfalls einrichten wollten.

Die heruntergeladenen Pakete speichert die adkwinpesetup.exe in den selbst angelegten “Installers” Ordner.
Die “UserExperienceManifest.xml” Datei gehört ebenfalls dazu!

Rufen Sie im Anschluss die adkwinpesetup.exe auf und wählen Sie den Punkt Windows-Vorinstallationsumgebung (Windows PE) aus. Klicken Sie auf Installieren. Dieser Prozess kann nun je nach Ihrer Internetanbindung eine ganze Ecke dauern.

Wenn das alles installiert wurde haben Sie den Grundstock zur Erstellung Ihres eigenen WinPEs gelegt. Der schwierige Teil jedoch, kommt erst noch. 😛

Bereitstellungstools Icon anlegen

Drücken Sie die Windows Taste + S, um die Windows Suche zu starten. Tippen Sie dort “image” ein und Sie werden dort “Umgebung für Bereitstellungs- und Imageerstellungstools” finden. Diesen heften Sie bitte über die Rechte Maustaste an den Start an. Dadurch müssen Sie dieses Tool nicht immer wieder suchen.

Synology – Neuen gemeinsamen/freigegebenen Ordner anlegen: Windows Images Ordnerstruktur

Melden Sie sich bei Ihrer Synology an und erstellen Sie einen neuen gemeinsamen/freigegebenen Ordner für Ihre Windows Images und geben Sie einem Benutzerkonto Rechte diesen lesen zu dürfen. Sie können auch wahlweise einfach ein neues Benutzerkonto anlegen, extra für Windowsinstallationen über Netzwerk. Den Ordner könnten Sie z.b. “WSources” nennen.

Achten Sie bitte auch auf Groß- und Kleinschreibung.

Für ein flexibles Windowsinstallationsmedium bittet sich eine Ordnerstruktur an, an dessen Sie kinderleicht erkennen können, wo, welche Windows Versionen hineinkommen. Ich empfehle Ihnen auch wirklich diese Ordner so zu benennen, denn das wird Ihnen die weitere Einrichtung durch meine Anleitung erleichtern.

WSources-Root-Ordner:

Win7 Ordner:

Win8 Ordner:

Win10 Ordner:

Windows Server Ordner:

Damit Ihnen nicht langweilig wird, laden Sie sich alle Windows Versionen, die Sie über Netzwerk installieren lassen möchten von Microsoft herunter und entpacken Sie diese ISOs in die jeweiligen, dafür vorgesehenen Ordner. Es ist nicht ratsam die DVD von Ihrer Windows Version zur Hand zu nehmen, da Sie dann das Problem haben, ein sehr altes Windows Build vor sich zu haben, wo aktuelle Updates und Features fehlten. Es ist in solchen Fällen immer die bessere Entscheidung die aktuellste Version von Microsoft zu beziehen, da diese ISOs immer auf dem aktuellsten Patchstand sind. Denn je nachdem wie alt Ihre Windows DVD ist, wird das einen anschließenden Updatemarathon nach sich ziehen.

Hier finden Sie die Übersichtsseite von Microsoft.

Um Windows 10 ISO’s für die Home, Pro und Education Versionen herunterzuladen, verwenden Sie das Media Creation Tool 10 von Microsoft.
Um Windows 8.1 ISO’s für die Home und Pro Versionen herunterzuladen verwenden Sie das Media Creation Tool 8 von Microsoft.

Alternativ können Sie auch die Freeware “Windows ISO Downloader” herunterladen.  Von Windows 7 bis Windows 10 können sie für jede Version eine ISO beziehen.

Wie Ihnen vielleicht aufgefallen ist, habe ich in meiner Struktur keine Trennung nach verschiedenen Sprachen, denn ich persönlich brauche nur die deutschen Versionen. Wenn Sie das zusätzlich noch nach Sprachen trennen wollen, können Sie das natürlich gerne machen, bedeutet aber auch mehr Arbeit 🙂

WinPE Ordner und Dateien kopieren und Treiber falls notwendig einbinden

Ich habe Ihnen ein kleines Paket geschnürt, das Sie sich erst einmal herunterladen werden:

Aktualisiert – 26.08.2023:

  • ADK-Paket wurde aktualisiert.
  • Intel Treiber Paket auf Version 28.2 aktualisiert

Download: W10 ADK-Paket (Erstellt von Stefan Saft)

 

Sie werden dort ein Verzeichnis mit dem Namen: “PXEServerTools” finden, das Sie bitte direkt auf “C:\” kopieren. Die Batch-Dateien speichern Sie bitte irgendwo, wo Sie diese auch jederzeit wiederfinden 😉 Kommen Sie nicht auf die dumme Idee, diese jetzt schon zu starten. Wir müssen erst noch einige Dinge ändern.

Nun zu der Erklärung, was es damit auf sich hat. Schritt für Schritt natürlich.

Der PXEServerTools-Ordner ist äußerst nützlich bei der WinPE Erstellung, da dort gefundene Treiberdateien mit eingebunden werden. Schauen Sie sich den “C:\PXEServerTools\Drivers” Ordner einfach mal an. Grundlegend müssen bei allen Treibern zwischen 32-Bit und 64-Bit unterschieden werden. Wenn Sie eigene Treiber einbinden wollen, dann erstellen Sie einfach einen weiteren Ordner im x86 und x64 Ordner für Ihre Komponente. Bei RAID Treibern z.b. einen Storage Ordner.

Ich war mal so frei und habe die gängigsten Netzwerktreiber bereits in die Verzeichnisse kopiert. Weitere Treiber sind grundsätzlich auch nicht nötig, denn für unser Vorhaben: “Windows Netzwerkinstallation” ist es äußerst wichtig, das die Netzwerkkarte immer erkannt wird. Daher ist es zwingend erforderlich, auch möglichst alle Netzwerktreiber einzubinden. Für besondere Storage Konstellationen wie RAID Verbunde oder ähnliches müssten Sie diese Treiber ebenfalls einbinden, damit Windows Ihre Festplatten auch erkennt und somit die Installation überhaupt möglich wäre.

Warum habe ich das mit vordefinierten Ordnern gelöst?

Weil die Befehle die abgearbeitet werden müssten, wenn man das alles manuell in die Bereitstellungskonsole tippt, eine Ewigkeit dauert. Das Ziel ist der Automatismus dieser Abläufe oder haben Sie Lust 50 Befehle in der Bereitstellungskonsole manuell eingeben zu müssen ? Ich nicht und ich denke Sie auch nicht. 😉

Die Startnet.cmd lädt unser späteres Menü, das auch die Verbindung zu der Netzwerkfreigabe herstellen wird.

Kopieren der winpe_menu.cmd

Kopieren Sie zuallererst die winpe_menu.cmd in das WSources-Root-Verzeichnis.

In dieser Datei ist die Menüstruktur mit dem netten Frage- und Antwortspiel hinterlegt, welches Windows installiert werden soll.

Der Vorteil der Trennung und die der Abspaltung aus der Startnet liegt schlicht darin, dass Sie bei Änderungen an der Menüstruktur nicht jedes Mal ein neues WinPE erstellen müssten. Ändern Sie dann einfach die Datei ab und sparen Sie sich die Generierung des WinPEs bei simplen Menüänderungen. Das spart Zeit und sie können schneller Testen und Experimentieren, ob Ihre Änderungen auch funktionieren.

Startnet.cmd editieren

Sie werden außerdem einen Ordner mit dem Namen “Startnet” finden. In diesem befindet sich die “startnet.cmd” und zu dieser kommen wir als erstes, bevor wir überhaupt in der Lage sind, das WinPE zu erstellen.

Vorwort: Was macht die Startnet.cmd
Die Startnet.cmd ist eine Datei die beim Starten eines WinPEs immer ausgeführt wird. Diesen Umstand können wir uns zu Nutze machen um die Netzwerkinstallation zu vereinfachen.

Öffnen Sie zunächst diese Datei bitte in einem Editor Ihrer Wahl, denn wir müssen dort einiges ändern!

startnet.cmd:

Suchen Sie als erstes bitte einmal diesen Teil:

set NTIP=192.168.1.5

Diese IP ändern Sie bitte auf Ihre DS IP!

Des Weiteren suchen Sie:

set WindowsShare=WSources

Falls Sie den erstellten gemeinsamen Ordner nichtWSources” genannt haben, müssen Sie diesen Teil ändern.

Und nun zu dem mitunter wichtigstem Teil:

set User=installer
set Pass=loadwindows

Benutzer: Installer
Passwort: loadwindows

Diese Angaben müssen Sie natürlich ändern. Geben Sie dort den Benutzer mit Passwort an, der das Recht hat auf den gemeinsamen Ordner zugreifen zu dürfen.
Eine Gastfreigabe wäre auch möglich und könnte zum Beispiel so umgesetzt werden:

set User=guest
set Pass=none

Ich empfehle Ihnen das trotzdem nicht mit Gastrechten zu machen 😉

Mit dieser Datei sind wir nun auch fertig. Also bitte einmal speichern. Den Rest der Datei können Sie sich natürlich auch mal angucken. Dann erkennen Sie auch wie das ganze Menü aufgebaut ist.

Denn so sieht das nachher einmal aus:

WinPE Bootscreen mit Auswahlmenü
Nützliche Programme im WinPE
CPU-Z für den schnellen Hardwareüberblick

Dort sehen Sie die startnet.cmd und winpe_menu.cmd in Aktion.

CreateWinPE10_x86_x64.cmd Optionen

Dies ist unsere Batch-Datei, die die WinPE-Images erstellen wird.

Öffnen Sie diese bitte mit einem Editor.

Grundlegend ist zu sagen, dass alle Bereiche und dessen Tätigkeiten mit Kommentaren versehen sind. Das sind die REM und :: Einträge  = Kommentare.

WinPE Sprache setzen

Was für Sie vielleicht noch interessant wäre, ist dieser Teil:

set WinPE_LCODE=de-DE
set WinPE_LDIR=de-de

Dort setzen Sie die Sprache für das gesamte WinPE und dessen Pakete!

Wenn Sie das beispielsweise in Englisch ändern wollen, dann wäre dies die Lösung:

set WinPE_LCODE=en-US
set WinPE_LDIR=en-us

Beachtet hierbei unbedingt, das hier keine Unterstriche verwendet werden! Es sind normale Bindestriche!

Wem dieses Mal­heur dennoch passiert ist, muss den fehlgeschlagenen Versuch mit:

dism.exe /Unmount-Wim /MountDir:"C:\WinPE_x86\mount" /Discard

wieder entladen. Für die x64 Version müsst Ihr das nicht machen, da immer zuerst die x86 Version in dem Skript geladen wird. Das x64 WinPE ist da noch gar nicht geladen und muss somit auch nicht entladen werden.

BitLocker-Unterstützung aktivieren (Optional)

Für die Unterstützung von BitLocker verschlüsselten Festplatten editieren Sie die Datei wie folgt:

Suchen Sie:

set WinPE_BITLOCKER=0

und ändern Sie die 0 in eine 1.

iSCSI-Unterstützung aktivieren (Optional)

Für die Unterstützung von iSCSI Verbindungen editieren Sie die Datei wie folgt:

Suchen Sie:

set WinPE_iSCSI=0

und ändern Sie die 0 in eine 1.

Benutzerdefinierten WinPE Hintergrund aktivieren (Optional)

Um den Standard WinPE Hintergrund zu überschreiben, aktivieren Sie diesen Eintrag:

Suchen Sie:

set WinPE_Background=0

und ändern Sie die 0 in eine 1.

Nützliche Programme ins WinPE einbinden (Optional)

Um nützliche Hardwaretools&Programme einzubinden, aktivieren Sie diesen Eintrag:

Suchen Sie:

set WinPE_Additional_Apps=0

und ändern Sie die 0 in eine 1.

CreateCustomBCD_WinPE_BIOS_AND_UEFI_X86_X64.cmd Erklärung

Viel gibt es hier nicht zu sagen. Das wird unsere Boot Configuration Data Datei. Diese Datei können Sie sich auch mal in Ruhe angucken. Diese ist ebenfalls mit Kommentaren versehen und sollten Sie vorhaben weitere Einträge hinzuzufügen, sollte dies ein leichtes sein, denn die Vorgabe haben Sie bereits.

Damit Sie im UEFI Modus und eingeschaltetem Secure Boot das Menü angezeigt bekommen ist noch folgende Änderung in dieser Datei notwendig, die Sie ganz unten einfügen:

REM UEFI Secure Boot Signatur ANFANG
bcdedit -store C:\BCD -set {bootmgr} path \Boot\bootmgr.efi
REM UEFI Secure Boot Signatur ENDE

Im Hyper-V-Manager zum Beispiel klicken Sie dafür auf eine VM und dann auf Einstellungen und stellen es wie auf dem Bild zu sehen ist ein:

Hyper-V PXE UEFI Secure Boot
Hyper-V PXE UEFI Secure Boot

WinPEs erstellen

Nun sind wir endlich an dem Punkt angekommen die WinPEs in Auftrag zu geben.

Starten Sie nun das Tool “Umgebung für Bereitstellungs- und Imageerstellungstool” mit Administratorrechten, das Sie anfangs an den Start angeheftet hatten.

Navigieren Sie nun über den “cd Ordnername” Befehl zu dem Ort, wo Sie die Datei “CreateWinPE10_x86_x64.cmd” gespeichert haben.
Starten Sie diese Datei. Dieser Vorgang kann etwas dauern. Also heißt es nochmal…. Kaffee machen 🙂

Wenn der Vorgang abgeschlossen ist, werden Sie feststellen, dass Sie unter C:\ einen weiteren Ordner finden werden => C:\PXEServer

Hier liegen nun die WinPE-ISO’s, als auch die WinPE-Wim-Dateien und die Bootmanager Dateien wie boot.sdi, pxeboot.n12, bootmgr.exe und die MUI Sprachpakete.

WinPE Dateien auf den TFTP Server transferieren

Das Gröbste haben wir nun hinter uns. Jetzt geht es darum die Dateien auch startbar aus unserer Syslinux Umgebung zu machen.

Erstellen Sie zunächst einen Ordner “Winpe” im “images” Ordner Ihres TFTP Servers.
Innerhalb des “Winpe” Ordners einen weiteren der “WinPE10.0” heißt.

Kopieren Sie nun folgende Dateien alle in den”WinPE10.0” Ordner auf Ihren TFTP Server (images\Winpe\WinPE10.0):

C:\PXEServer\BootSources\ISO\WinPE_x64.iso
C:\PXEServer\BootSources\ISO\WinPE_x86.iso
C:\PXEServer\BootSources\WinPE_x64.wim
C:\PXEServer\BootSources\WinPE_x86.wim

Kopieren Sie als nächstes folgende Dateien direkt in das TFTP ROOT Verzeichnis:

C:\PXEServer\Boot32\bootmgr.exe
C:\PXEServer\Boot32\pxeboot.n12(Nach dem kopieren bitte in pxeboot.0 umbenennen!)

Erstellen Sie im TFTP Root Verzeichnis noch folgende Ordnerstruktur:

\Boot\
\Boot\de-DE\
\Boot\Fonts\
\Boot\resources\
\EFI\
\EFI\Microsoft\
\EFI\Microsoft\Boot\
\EFI\Microsoft\Boot\de-DE\
\EFI\Microsoft\Boot\Fonts\
\EFI\Microsoft\Boot\resources\

Kopieren Sie nun folgende Dateien in das \Boot\de-DE\ Verzeichnis auf Ihren TFTP Server:

C:\PXEServer\Boot32\de-DE\bootmgr.efi.mui (Bitte in bootmgr.efi.MUI umbenennen!)
C:\PXEServer\Boot32\de-DE\bootmgr.exe.mui (Bitte in bootmgr.EXE.MUI umbenennen!)

Kopieren Sie nun folgende Datei in das \Boot\ Verzeichnis auf Ihren TFTP Server:

C:\PXEServer\Boot32\boot.sdi

Kopieren Sie nun von dem Rechner auf dem das ADK installiert ist, folgende Dateien in den \Boot\Fonts\ und \EFI\Microsoft\Boot\Fonts\ Ordner auf den TFTP Server:

Die Font-Dateien sind für den BIOS- als auch den UEFI-Modus identisch.

C:\Windows\Boot\Fonts\ ALLE DATEIEN!

Kopieren Sie folgende Dateien in den TFTP Root Ordner:

C:\Windows\Boot\EFI\bootmgfw.efi (Bitte in bootx64.efi umbenennen!)

Kopieren Sie außerdem noch folgende Dateien in den TFTPROOT\Boot\ Ordner:

C:\Windows\Boot\EFI\bootmgr.efi

Mounten Sie nun bitte einmal die WinPE_x86.iso mit “Öffnen mit” und dann Windows Explorer.

Kopieren Sie aus dem ISO folgende Dateien in den TFTP ROOT Ordner:

DVDROM\EFI\Boot\bootia32.efi

Kopieren Sie aus dem ISO folgende Dateien in den TFTPROOT\Boot\ Ordner:

DVDROM\Boot\BCD (Bitte in BCD_Wimboot um­be­nen­nen!)

iPXE Konfigurationseinträge erstellen

Fügen Sie folgende Zeilen in der pxeEFI32.ipxe.cfg und pxeEFI64.ipxe.cfg Datei ganz unten an:

# OPTIONAL: Windows 10 Build Nummer
set win10-build 21H1

iPXE Booteinträge erstellen

Suchen Sie nun in der pxeEFI32.ipxe.menu und pxeEFI64.ipxe.menu:

menu Installationsumgebungen - Client: ${ip} ${platform}_${buildarch}

Fügen Sie darunter folgendes ein:

item --gap -- ----- Windows Installationen -----------------------------------------------------------------------
item --key 6 winpe10_x64 WinPE 10.0 Build ${win10-build} 64-Bit - Wimboot
item --key 3 winpe10_x86 WinPE 10.0 Build ${win10-build} 32-Bit - Wimboot

Suchen Sie weiter:

:menu-install-timed
choose --timeout ${submenu-timeout} --default ${submenu-default} selected && goto ${selected} || goto start

Fügen Sie darunter folgendes ein:

:winpe10_x64
echo ${cname}Wimboot - Starte WinPE 10.0 Build ${win10-build} 64-Bit ${reset}
kernel ${boot-url}wimboot
initrd ${boot-url}bootx64.efi
initrd --name BCD ${boot-url}Boot/BCD_Wimboot
initrd ${boot-url}Boot/boot.sdi boot.sdi
initrd --name boot.wim ${boot-url}images/Winpe/WinPE10.0/WinPE_x64.wim
boot || goto failed
goto start

:winpe10_x86
echo ${cname}Wimboot - Starte WinPE 10.0 Build ${win10-build} 32-Bit ${reset}
kernel ${boot-url}wimboot
initrd ${boot-url}bootia32.efi
initrd --name BCD ${boot-url}Boot/BCD_Wimboot
initrd ${boot-url}Boot/boot.sdi boot.sdi
initrd --name boot.wim ${boot-url}images/Winpe/WinPE10.0/WinPE_x86.wim
boot || goto failed
goto start

Löschen Sie die nicht unterstützen Modi für jeden Modus bitte von Hand raus.

UEFI32 = 64-Bit = Nicht unterstützt.
UEFI64 = 32-Bit = Nicht unterstützt.

Manche werden sich vielleicht wundern, warum ich immer auf die selben Dateien verweisen lasse und lediglich die WIM-Datei und bootx64.efi oder bootia32.efi das Einzige ist, dass sich wirklich unterscheidet. Ich benutze hier für alle WinPEs die gleichen Dateien:  boot.sdi, BCD, bootia32.efi oder bootx64.efi.

Es ist nämlich meistens nicht nötig die originalen der ISOs zu nehmen. Wenn die WinPEs alle mit der gleichen Windows- und ADK Version erstellt wurden, dann funktionieren diese Dateien auch in allen anderen WinPE Versionen. Selbst wenn Ihr WinPEs älterer Generation nutzt, so geht das in 90% der Fälle trotzdem. Spart euch also das unnötige Anlegen dieser Dateien für all eure WinPEs im Sortiment. Außerdem lässt sich das so auch viel einfacher aktuell halten.

Sollte wirklich mal der Fall eintreten, dass irgendein Programm mit den gennanten Standarddateien von oben nicht funktioniert, dann verweist halt auf die originalen des betroffenen WinPEs.

Das wäre dann das Resultat (Ohne den Ubuntu Eintrag darüber!):

iPXE UEFI Menü

CreateCustomBCD_WinPE_BIOS_AND_UEFI_X86_X64.cmd ausführen

Starten Sie die Eingabeaufforderung mit Administratorrechten und führen Sie dieses Skript bitte einmal aus. Danach finden Sie eine BCD Datei unter C:\ die Sie bitte an folgenden Ort verschieben:

TFTPROOT\Boot\

PXELinux 6.04-pre1 Booteinträge erstellen

Öffnen Sie die pxelinux.cfg/default_BIOS und suchen Sie nach:

KBDMAP german.kbd

Fügen Sie direkt darunter folgendes ein:

##############################################################
#Windows Section
##############################################################
LABEL WindowsSysteme
MENU LABEL Windows Installation:
MENU DISABLE

MENU BEGIN

MENU TITLE + Windows Installations Service

LABEL Original
MENU LABEL Microsoft Windows PE Images:
MENU DISABLE

LABEL WinPE50X32ISO
MENU LABEL 1. WinPE10.0 32-Bit - MemDisk ISO (Windows 10)
MENU INDENT 2
COM32 linux.c32 memdisk
APPEND iso raw
INITRD images/Winpe/WinPE10.0/WinPE_x86.iso
TEXT HELP
Es wird die Windows Vorinstallations Umgebung 10.0 (Windows 10) im
32 Bit Modus geladen mit allen Netzwerktreibern.

Die WinPE Versionen sind abwaertskompatibel. Es ist Ihnen moeglich
mit der WinPE 10.0 Version auch aeltere Windows Versionen zu installieren.

Es wird automatisch das Netzwerkshare zu den Windows Images aufgebaut.
ENDTEXT

LABEL WinPE50X64ISO
MENU LABEL 2. WinPE10.0 64-Bit - MemDisk ISO (Windows 10)
MENU INDENT 2
COM32 linux.c32 memdisk
APPEND iso raw
INITRD images/Winpe/WinPE10.0/WinPE_x64.iso
TEXT HELP
Es wird die Windows Vorinstallations Umgebung 10.0 (Windows 10) im
64 Bit Modus geladen mit allen Netzwerktreibern.

Die WinPE Versionen sind abwaertskompatibel. Es ist Ihnen moeglich
mit der WinPE 10.0 Version auch aeltere Windows Versionen zu installieren.

Es wird automatisch das Netzwerkshare zu den Windows Images aufgebaut.
ENDTEXT

LABEL WinPE50X32X64MGR
MENU LABEL 3. WinPE10.0 32-Bit + 64-Bit - BootMGR (Windows 10)
MENU INDENT 2
KERNEL pxeboot.0
TEXT HELP
Es wird die Windows Vorinstallations Umgebung 10.0 (Windows 10) im
64 Bit oder 32 Bit Modus geladen mit allen Netzwerktreibern.

Die WinPE Versionen sind abwaertskompatibel. Es ist Ihnen moeglich
mit der WinPE 10.0 Version auch aeltere Windows Versionen zu installieren.

Es wird automatisch das Netzwerkshare zu den Windows Images aufgebaut.
ENDTEXT

MENU SEPARATOR

LABEL return_main

MENU LABEL - ^Zum Hauptmenu
MENU INDENT 1
MENU EXIT

MENU END

Ich habe Ihnen dort ein Beispiel mit Memdisk und das Beispiel des Umwegs über den BootMGR gemacht. Ich persönlich empfehle Ihnen Memdisk zu meiden, da Sie gerade in Bezug auf die Geschwindigkeit mit dem BOOTMGR schneller sind und nicht solange warten müssten. Außerdem haben Sie dort einen schönen Balken der verdeutlicht, wie viel noch transferiert werden muss!

WinPE - TFTP Datentransfer einer WIM-Datei
WinPE – TFTP Datentransfer einer WIM-Datei

Der Test

Booten Sie nun einen Rechner über Netzwerk und Sie sollten im BIOS Modus das Syslinux Menü sehen und es Ihnen auch möglich sein, den Windows-Boot-Manager Eintrag zu starten und Windows installieren zu können. Im EFI Modus werden Sie in das iPXE Menü booten. Testen Sie auch jeden Eintrag, ob auch alles funktioniert. Eine Testinstallation im EFI Modus in einer VM schadet vielleicht auch nicht 😉

Sollten Sie noch Fragen haben, so nutzen Sie einfach die Kommentarfunktion.

Zum Anfang!

112 Antworten auf „PXElinux 6.04-pre1/iPXE 1.21.1 – Windows 10 ADK 22H2 WinPEs erstellen“

    1. Ich kann mit dem Fehler spontan nichts anfangen. Viele Informationen haben sie leider nicht preisgegeben. Eigentlich gar keine.

      BIOS oder UEFI Modus?

      Im UEFI Modus IPV6 gewählt? Funktioniert nicht, da IPV6 in meiner Anleitung nicht konfiguriert wurde.

      Ansonsten loggen Sie sich über SSH bei Ihrer Synology ein und öffnen die opentftp.log mittels:

      sudo vi /var/log/opentftp.log

      Ganz nach unten scrollen und dann steht jeweils am Ende des Eintrages eine genauere Beschreibung, warum etwas nicht funktioniert hat.

      1. Sorry für die fehlenden Infos. Ja ich habe es sowohl im UEFI-Modus und BIOS Modus probiert. Geht beides nicht.
        IPV4 natürlich, das Log: (die letzten Zeilen)
        [18-Sep-18 17:44:26] Client 192.168.178.201:10380 /volume1/pxe/Boot/de-DE/bootmgr.efi.MUI, Error 0 at Client, TFTP Aborted
        [18-Sep-18 17:44:26] Client 192.168.178.201:10381 /volume1/pxe/Boot/de-DE/bootmgr.efi.MUI, 56 Blocks Served
        [18-Sep-18 17:44:26] Client 192.168.178.201:10382 /volume1/pxe/EFI/Microsoft/Boot/Fonts/wgl4_boot.ttf, Error 0 at Client, TFTP Aborted
        [18-Sep-18 17:44:26] Client 192.168.178.201:10383 /volume1/pxe/EFI/Microsoft/Boot/Fonts/wgl4_boot.ttf, 35 Blocks Served
        [18-Sep-18 17:44:28] Client 192.168.178.201:10384 /volume1/pxe/images/Winpe/WinPE10.0/WinPE_x86.wim, Error 0 at Client, TFTP Aborted
        [18-Sep-18 17:44:28] Client 192.168.178.201:10385 /volume1/pxe/Boot/boot.sdi, Error 0 at Client, TFTP Aborted
        [18-Sep-18 17:44:31] Client 192.168.178.201:10386 /volume1/pxe/Boot/boot.sdi, 2179 Blocks Served
        [18-Sep-18 17:47:19] Client 192.168.178.214:1538, Access Denied
        [18-Sep-18 17:47:35] Client 192.168.178.201:10387 /volume1/pxe/images/Winpe/WinPE10.0/WinPE_x86.wim, 150141 Blocks Served
        [18-Sep-18 17:47:44] Client 192.168.178.214:1564, Access Denied

        Die 214 ist ein anderer PC mit dem ich es probiert habe.

        1. Der Error Code 0 bedeutet “Zugriff verweigert”.

          Hast du bei deinem TFTP Server in den Einstellungen irgendwas geändert? Hast du vielleicht nur bestimmte IP Adressen erlaubt? Da würde ich als erstes mal nachgucken. Jedenfalls haben deine Clients keine Berechtigung die Dateien auf dem TFTP Server zu lesen.

  1. Hallo,

    Ich habe ein Problem mit der startnet.cmd.
    Beim booten des WinPE kommt er bis zur Oberfläche des WinPE, jedoch erscheint nur eine leere Prompt.

    Bei jeglicher Bootvariante das selbe Ergebnis.
    Ich bin Ratlos nach 3 Tagen herumprobieren.

    Grüße Kay K.

    1. Hallo Kay,

      wo genau liegt denn Ihre bearbeitete/angepasste startnet.cmd?

      Die muss direkt unter c:\PXEServerTools\Startnet\startnet.cmd liegen. Wenn Sie den Ort verändert haben, verwundert es mich nicht, dass die prompt bei Ihnen leer bleibt, denn wenn die Datei nicht gefunden werden kann durch das Batchskript zum Erstellen der WinPE’s, kann diese ja auch nicht kopiert und somit auch eingebunden werden. Das Ergebnis wäre dann halt die leere prompt, die sie ja auch angezeigt bekommen.

      Eine andere mögliche Ursache fällt mir momentan dazu nicht ein.

      1. Hiho,

        Sie befindet sich in c:\PXEServerTools\Startnet\.
        Wenn ich die beiden WIM Dateien entpacke, finde ich sie dort auch mit den übernommenen Änderungen.
        Ich teste alles in eine VMWorkstation Version 14

        1. Hallo,

          dann weiß ich es auch nicht. Ich meine, wenn die Datei ja definitiv im WIM Image enthalten ist, dann müsste diese ja auch direkt ausgeführt werden. Ich habe bereits selbst schon all meine Images aktualisiert und hatte das Problem nicht. Hätte ja auch ein Bug oder so sein können 🙂

          Haben Sie das Problem denn auch, wenn sie das mal ohne VM und mit einem richtigen Rechner testen?
          Bekommen Sie den blinkenden Balken in der prompt angezeigt? Wenn nicht, dann hat sich die prompt wohl auf gehangen. Warum? Keine Ahnung. Ansonsten habe ich dazu auch keine weiteren Einfälle.

  2. Hallo Stefan,

    danke mit dem Hinweis auf diesen zweiten Artikel. Wirklich ein Klasse Tutorial!
    Allerdings hätte ich eine kleine Anmerkung zu deinem “CreateWinPE10_x86_x64.cmd”. Diese lief bei mir zunächst auf einen Fehler. Nach kurzem Suchen ist mir aufgefallen, dass die Datei “copype.cmd” wohl Fehlerhaft seitens Microsoft ausgeliefert wird. Da sich die “copype.cmd” auch einzeln nicht ausführen lies ist mir aufgefallen, dass hier schlichtweg einige Variablen fehlen.

    Ich habe die “copype.cmd” wie folgt angepasst: (Zur Einfachheit habe ich den kompletten “Set environment variable” Block kopiert.)

    rem
    rem Set environment variables for use in the script
    rem
    set WINPE_ARCH=%1
    set WinPERoot=C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment
    set OSCDImgRoot=C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools
    set SOURCE=%WinPERoot%\%WINPE_ARCH%
    set FWFILESROOT=%OSCDImgRoot%\%WINPE_ARCH%\Oscdimg
    set DEST=%~2
    set WIMSOURCEPATH=%SOURCE%\en-us\winpe.wim

    Nach der Anpassung hat alles sauber funktioniert.

    Getestet bzw. die ADK Installation überprüft habe ich übrigens auf mehreren Rechnern mit ADK 1709, 1803 und auch mit dem neuen 1809 und dem damit verbundenen PE Addon. (Das wurde ja neuerdings getrennt. ;-))

    In allen Versionen musste ich die “copype.cmd” manuell anpassen.

    Gruß,
    Bene

    1. Hallo,

      bei mir funktioniert das alles.

      Die Parameter werden auch mittels der Zeile übergeben:

      call "%KITPATH%\Windows Preinstallation Environment\copype.cmd" x86 "%TEMPDIRx86%\"

      Vielleicht hattest du den Installationspfad angepasst gehabt oder verwendest sogar ein eigenes Skript dafür? Warum sonst hast du gleich all diese Zeilen geändert? Wenn eine der Variablen natürlich nicht in den dementsprechenden Pfad aufgelöst wird, dann bekommt du natürlich auch die Fehlermeldung. Also entweder konnte er mit %KITPATH% oder mit %TEMPDIRx86% nichts anfangen. Aber wie gesagt, ich vermute ja eher, das du da dein eigenes Konstrukt gebastelt hast. 🙂

  3. Hallo. Habe alles nach deiner Anleitung zum Laufen bekommen. Coole Sache. Würde nun gerne den Bootmanager mit weiteren PE‘s (Acronis True Image, c‘t Notfall Windows etc.) füllen. Wie kann ich das bewerkstelligen.

    Gruß Tommy

  4. Hallo Stefan,
    eine kleine Ergänzung zum Thema “startnet.cmd”:

    Ich bin schon lange davon abgekommen ein Menü in die startup.cmd einzubauen. Wenn eine Änderung/Erweiterung vom Menü erfolgen soll – jedesmal die startnet.cmd in der “wim” neu zu machen war mir zu viel Stress . 😉
    Seit dem sieht meine “startnet.cmd” wie unten folgend aus und das Menü ist auf die Freigabe ausgelagert. Über einen eingebundenen Editor kann man das Menü bearbeitet und die Änderungen bleiben erhalten.
    ==========================================
    @ECHO OFF
    :: startnet.cmd
    SET ServerIP=10.128.5.184
    SET PASS=pass
    ::——————————–
    @ECHO Wpeinit und verbinde Z: nach \\%ServerIP%\pxeroot\data
    wpeinit
    SET ARCH=%PROCESSOR_ARCHITECTURE%
    SET Path=Z:\;%Path%
    net use Z: \\%ServerIP%\pxeroot\data /user:admin %PASS%
    IF NOT %ERRORLEVEL%==0 call :error
    Z:\menu.cmd
    GOTO :EOF

    :error
    echo FEHLER – Netzlaufwerk erneut verbinden
    echo warte 10 Sekunden
    PING -n 10 127.0.0.1>nul
    net use Z: \\%ServerIP%\pxeroot\data /user:admin %PASS%
    IF NOT %ERRORLEVEL%==0 ECHO Kein Netzlaufwerk gefunden & GOTO :ENDE
    EXIT /B

    :ENDE
    ==============================================

    Das Beispiel ist für meine Umgebung geschrieben, aber das Prinzip ist ja erkennbar. “SET ARCH=%PROCESSOR_ARCHITECTURE%” wird für/ im Menü zur Steuerung einiger Aufrufe genutzt .

    Gruß Kasi

    1. Das kann natürlich jeder machen wie er möchte. Auf der anderen Seite muss man sich dann aber auch fragen:

      “Wie oft aktualisiert man denn so ein WinPE Image?”

      Ich mache das immer dann, wenn ein neues Feature-Update kommt, denn in den normalen Updates ändert sich prinzipiell nur selten etwas an den WinPE Dateien. Zumal das Windows ADK und die WinPE Dateien ja sowieso gesondert angeboten werden und nicht im Standard Windows Home/Pro etc enthalten sind. Das Menü wäre eine Überlegung wert, aber auch hier wäre es für mich privat dann auch eher unnötig. In Unternehmen sind Varianten, die eine schnelle Bearbeitung zulassen natürlich besser, als erst nochmal die Images erstellen zu müssen, klar. In dem Falle würde ich mir – bedingt durch meine Faulheit – das Ganze dann auch so schreiben, dass die Menüdatei direkt editierbar ist.

      Nur wie gesagt, wie oft ändert man denn privat die Menüeinträge? Ich mache das immer nur bei den Feature-Updates und auch da ändern sich meistens nur die Versionen.

      Deine Idee ist natürlich trotzdem sehr gut. Man könnte da soviel mehr machen als ich in der Anleitung beschrieben habe. Na klar, aber irgendwo muss man auch die Notbremse ziehen und sich daran erinnern, dass diese Anleitung für Anfänger ist. Profis wissen für gewöhnlich ja sowieso wie man das den eigenen Wünschen entsprechend anpasst.

      PS: Das Kommentare auch mit :: abgekürzt werden können war mir neu 😀 Wieder was gelernt. Sieht auch besser aus als REM 🙂 Nur ist hier die Ver­wech­se­lungs­ge­fahr mit den Sprungmarken doch sehr hoch. Aber Egal 🙂

      1. Zitat: “Man könnte da soviel mehr machen als ich in der Anleitung beschrieben habe. ”

        Genau darum lasse ich mir die Möglichkeit das Menü außerhalb der “wim” zu bearbeiten.
        Zum Schluss möchte ich noch meine vollste Anerkennung für ihren tollen Artikel zum Ausdruck bringen! Einfach Spitze!

        Danke & Gruß Kasi

  5. Hallo zusammen,

    mal eine Frage, kann man dem Windows Bootmanager (BCD File das erstellt wird) auch beibringen, das der als ersten Eintrag Standardmäßig das vorhandene Windows (Win7 oder Win10) booten soll, analog dem Eintrag wie er im Linux Bootmenu gemacht wird?
    Also wenn nichts gedrückt wird boote von HDD…

    1. Das ist eine gute Frage! Ich habe ein wenig herumprobiert und hiermit funktioniert das so einigermaßen.

      Du kannst die Datei: “CreateCustomBCD_WinPE_BIOS_AND_UEFI_X86_X64.cmd” folgendermaßen anpassen:

      Das fügst du unter den bestehenden zwei Einträgen ein:

      Variante 1 (UEFI Windows 7/8/10 Start):

      REM BOOT EINTRAG #3
      for /f "tokens=1-3" %%a in ('bcdedit -store C:\BCD -create /d "Starte Windows 7/8/10 (UEFI)" /application osloader') do set GUID3=%%c
      bcdedit -store C:\BCD -set %GUID3% device locate=custom:12000002
      bcdedit -store C:\BCD -set %GUID3% path \Windows\system32\winload.efi
      bcdedit -store C:\BCD -set %GUID3% osdevice locate=custom:22000002
      bcdedit -store C:\BCD -set %GUID3% locale de-DE
      bcdedit -store C:\BCD -set %GUID3% systemroot \Windows
      bcdedit -store C:\BCD -set %GUID3% detecthal Yes
      

      Variante (BIOS Windows 7/8/10 Start):

      REM BOOT EINTRAG #4
      for /f "tokens=1-3" %%a in ('bcdedit -store C:\BCD -create /d "Starte Windows 7/8/10 (BIOS)" /application osloader') do set GUID4=%%c
      bcdedit -store C:\BCD -set %GUID4% device locate=custom:12000002
      bcdedit -store C:\BCD -set %GUID4% path \Windows\system32\winload.exe
      bcdedit -store C:\BCD -set %GUID4% osdevice locate=custom:22000002
      bcdedit -store C:\BCD -set %GUID4% locale de-DE
      bcdedit -store C:\BCD -set %GUID4% systemroot \Windows
      bcdedit -store C:\BCD -set %GUID4% detecthal Yes
      

      Dann suchst du nach:

      bcdedit -store C:\BCD -set {bootmgr} displayorder %GUID1% %GUID2%
      

      und fügst die anderen beiden Guids hinzu:

      bcdedit -store C:\BCD -set {bootmgr} displayorder %GUID1% %GUID2% %GUID3% %GUID4%
      

      Wenn einer der Einträge vor selektiert sein soll, dann fügst du unter dieser Zeile:

      bcdedit -store C:\BCD -set {bootmgr} displayorder %GUID1% %GUID2%
      

      noch ein:

      bcdedit -store C:\BCD -set {bootmgr} default %GUID3%
      

      hinzu. Es sei dabei noch angemerkt, dass einer der Einträge natürlich nicht funktioniert 😉 Wenn Windows im UEFI Modus installiert wurde, dann wird der BIOS Eintrag nicht funktionieren. Im anderen Falle halt nur umgekehrt. Sollte aber klar sein. 😀

  6. Hallo Stefan,

    Ich habe den PXE-Boot nach Deiner Anleitung und nach einigen Startschwierigkeiten nun erfolgreich zum laufen bringen können. Vielen Dank dafür.
    Nun wollte ich damit anfangen den Image Ordner mit Windows PE und Verschiedenen Windows Versionen zum installieren über PXE-Boot zu befüllen, scheitere aber schon am Installieren der Windows 10 ADK, das herunterladen und die Erstinstallation funktioniert soweit Problemlos aber nach der Installation und dem erneuten Aufruf der “adksetup.exe” egal welcher, bekomme ich immer nur wieder die Ansicht zur Erstinstallation, das Menü “Wählen Sie die Futures aus, die Sie Änderung möchten” zum installieren/downloaden/starten der Bereitstellungstools bekomme ich nicht zu sehen.

    Was mache ich hier falsch?

    Carsten

    1. OK habe das Problem selber lösen können, der 2. Aufruf der “apksetup.exe” erfolgt dann mit dem ersten Menüpunkt “auf diesem Rechner installieren” dann klappt es auch mit den Bereitstellungsungstools.

      Vielleicht solltest Du Deine Anleitung um diese Angabe erweitern/ergänzen.

      Gruß
      Carsten

    2. Hallo Carsten,

      als ich die Anleitung verfasst hatte, war das alles schon bei mir installiert. Damit ich dieses Fenster mit den zu installierenden Features angezeigt bekam, musste ich natürlich bei dem bereits installierten Programm (Apps und Features) auf Ändern klicken. Wenn man das natürlich zum aller ersten Mal installiert, dann sieht das natürlich ein wenig anders aus. Die Ansicht mit den Auswahlkästchen ist jedoch identisch und genau darum ging es doch. Ob nun der Button im Fenster “Ändern” oder “Installieren” heißt dürfte wohl ziemlich Jacke wie Hose sein.

  7. Hallo Stefan,

    danke für das Howto, funktioniert auch fast alles. Einzig beim Booten via Windows Boot Manager bekomme ich folgenden Fehler: https://i.imgur.com/n72DhSX.png

    Die Verzeichnisnamen stimmen alle. Auch liegen alle benötigten Dateien in den jeweiligen Ordnern. Ich habe mich hier zu 100% an die Anleitung gehalten. Ich starte eine VM über Proxmox VM und habe noch virtio Storage und Netzwerktreiber in die PE-Images integriert, falls das relevant ist.

    Hast du eine Idee, was ich falsch gemacht habe?

    1. Es ist wahrscheinlich wieder das Problemchen, dass er die BCD nicht finden kann – steht ja auch in der Fehlermeldung. Der beliebteste Fehler wäre wohl, das der Boot Ordner von Dir kleingeschrieben wurde. Der WBM achtet immer auf Groß- und Kleinschreibung. Da kennt der keine Toleranz 😀

  8. Hier mal mein tftpd Log, in dem man sieht, dass das BCD file geladen wird: https://i.imgur.com/drhAKDy.png

    Mein UEFI Windows Boot über den WBM funzt übrigens auch nicht, im Log sehe ich folgendes immer dann, wenn ich den Menüpunkt auswähle:
    Oct 18 07:57:56 nas in.tftpd[8543]: RRQ from 10.10.10.136 filename pxeboot.0

    1. Sorry fürs spammen, aber ich kann hier meine Beiträge leider nicht bearbeiten. 😀

      Oder bedeuten diese Zeilen “sending NAK (1, File not found) to 10.10.10.136”, dass er die Dateien, die er vorher angefragt hat, nicht finden kann? Das würde es dann erklären. Allerdings gibt es alle Dateien. Eventuell Datei- und Ordnerberechtigungen?

  9. Ok, ich hab’s rausgefunden. Es lag am fehlenden Mapping. Stichwort tftp remap file.
    Wenn ich ein File erstelle mit dem Inhalt “rg \\ /”, das ich mit dem tftpd lade und somit Backslashes durch Forwardslashes ersetze, startet mein Windows. Dann muss ich nur mal schauen, ob das dann mit Linux auch funktioniert.

    1. Mich wundert das ein bisschen, denn bei mir war das nicht notwendig. Schön das es läuft, aber ich wüsste eigentlich schon gerne, warum du das setzen musstest und ich beispielsweise nicht. Das wäre eventuell auch etwas für die Anleitung als kleiner Hinweis.

      Aber dann muss ich nochmal nachfragen:

      Deine Umgebung ist haargenau so, wie diese in der Anleitung vorausgesetzt wird?
      Du hast das alles auf der Synology eingerichtet und nutzt KEINE anderen TFTP/DHCP Server Programme als die in der Anleitung erwähnten?

      Weil laut deinem IP Range würde ich daraus schließen, dass du das in einer Firma eingerichtet hast, die einen “etwas” größeren privaten IP Adressbereich nutzt. Den Größten um genau zu sein. Daher ist es für mich umso wahrscheinlicher, dass dort schon ein DHCP Server und eventuell auch ein TFTP Server existierte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert