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. Natürlich kannst du das. Aber für mich ist das einfach verwirrend wenn du etwas geändert hast, ich hingegen dann aber glaube, dass bei Dir alles nach Anleitung eingerichtet ist. Ich gehe ja grundsätzlich erst einmal davon aus, dass die Leute das auch wirklich so gemacht haben wie es in der Anleitung steht. Bei Problemfindungen ist es nicht von Vorteil, wenn man dann alles anders gemacht hat…

  1. Hab nun alles exakt nach deiner Anleitung gemacht, aber ich habe nach wie vor noch den selben Fehler.
    Ein Fehler ist aufgetreten!
    Die Verbindung konnte nicht hergestellt werden!…

    Natürlich habe ich dein neues paket ADK_BatchFiles_BCD runtergeladen und nun alles so editiert wie es gehört, einen Gemeinsamen Ordner für WSources angelegt, aber ich habe den Eindruck das WinPE die startnet.cmd nicht verarbeitet, egal was ich da rein schreibe es ändert nichts daran.
    Breche ich mit STRG+C ab und verbinde die Synology händisch mit net use funktioniert es auf anhieb!!
    Bin echt ratlos…

    1. Hast du vielleicht ein Leerzeichen in deinem Passwort?

      Ansonsten ändere einfach den net use Befehl wieder ab:

      Neu:

      net use v: \\%NTIP%\%WindowsShare% /user:%NTIP%\%User% %Pass%

      Alt:

      net use v: \\%NTIP%\%WindowsShare% /user:%User% %Pass%

      Der Witz ist ja noch, dass ich ein ähnliches Problem hatte, weshalb ich ja extra diese Zeile abgeändert hatte. Es stand über Jahre die Zeile “Alt” in der Datei, die wohl auch bei den meisten funktionierte. Habe da jedenfalls nie etwas gehört, dass dem nicht so wäre. Seit dem Windows 10 2004 WinPE musste ich dann bei mir noch die IP/Domain vor den Benutzer setzen, was eigentlich total unnötig ist, aber anders klappt es bei mir nicht. Ich hatte aber – außer Windows zu updaten und das ADK zu aktualisieren – sonst nichts an meiner Umgebung hier geändert. Vielleicht klappt es bei Dir ja sofort, wenn du die alte Zeile nimmst. Probiere es aus. 🙂

      Ich habe auch noch eine andere Idee. Wie genau startest du das WinPE eigentlich? Über Wimboot oder nutzt du dafür den Windows-Boot-Manager? Egal was die Antwort ist, mache mal das Gegenteil davon.

  2. Hallo Stefan, Leerzeichen verwende ich keines….
    Bei mir funktioniert weder alt noch neu, jedoch wenn ich abbreche und es händisch ohne Ip für den User mache funktioniert das immer! (Build 2004)
    Strange aber ich denke das die startnet.cmd nicht verarbeitet wird beim erstellen der iso/wim Dateien.
    Hab da mehrere fragen an dich
    Kennst du die datei in den Iso/wim welche die Einträge von der Startnet,cmd beinhaltet, weil dann könnte man ja die nachträglich editieren
    oder ein anderer Workaround
    Ich erstelle in der iso eine startnet.cmd und wenn ich dann mit STRG+C ruf ich die startnet.cmd einfach auf und erspar mir die Tipslerei jedesmal, könnte das funktionieren?

    Witzig ist ja das wenn ich auf meinen Win 10 Rechner die startnet.cmd ausführe die Verbindung zu meiner DSM sofort hergestellt wird.
    Oder könnte ich mit Build 1909 auch eine WinPE erstellen und diese Nutzen?

    Danke vorab
    VG Roland

    1. Zitat:
      “Bei mir funktioniert weder alt noch neu, jedoch wenn ich abbreche und es händisch ohne Ip für den User mache funktioniert das immer! (Build 2004)”

      Das war bei mir auch so, bis ich die IP dahinter gesetzt habe.

      Zitat:
      “Ich erstelle in der iso eine startnet.cmd und wenn ich dann mit STRG+C ruf ich die startnet.cmd einfach auf und erspar mir die Tipslerei jedesmal, könnte das funktionieren?”

      Kurz: Nein. Die Datei die du suchst heißt startnet.cmd 😀 Die findest du im X:\Windows\system32 Ordner wenn das WinPE/ISO geladen ist.

      Über notepad startnet.cmd könntest du diese dann öffnen und editieren. Diese Änderungen sind aber nur temporär! Vergiss das nicht. Wenn du das nächste Mal das WinPE/ISO lädst sind deine Änderungen wieder weg. Aber zum Testen, welche Konfiguration bei Dir funktioniert, scheint das wohl der beste Ansatz zu sein. Nach deiner Änderung kannst du dann auch die startnet.cmd erneut aufrufen lassen. Solange bis du eine funktionierende Variante gefunden hast. Ich würde Dir einfach empfehlen direkt unter der net use Zeile mal ein pause zu setzen und zu speichern, dann nochmals aufrufen und gucken was er sagt.

      Zitat:
      “Witzig ist ja das wenn ich auf meinen Win 10 Rechner die startnet.cmd ausführe die Verbindung zu meiner DSM sofort hergestellt wird.
      Oder könnte ich mit Build 1909 auch eine WinPE erstellen und diese Nutzen?”

      Für das Erstellen eines 1909 WinPEs brauchst du auch ein installiertes Windows 10 1909 System. Ich würde wegen des einen Fehlers mir den Blödsinn aber nicht antun wollen. Da wäre ich lieber stundenlang beschäftigt das Problem zu lösen 😛

  3. So Stefan nun bin ich etwas weiter und schlauer…
    Hab mir heute mit Build 1909 die Iso/wim wieder neu gebaut (anderer Rechner) und habe danach die *wim entpackt mit 7zip und mir die Startnet.cmd in X:\Windows\system32 angeschaut.
    Der Inhalt passt perfekt.
    So dann habe ich alle Dateien auf der Synology getauscht und wen wundert es, ich habe natürlich wieder den selben Fehler wie immer.

    Dann habe ich mit STRG-C abgebrochen und mir die startnet.cmd in X:\Windows\system32 wieder angeschaut.
    type startnet.cmd und siehe Da unter set User= steht auf einmal guest drinnen und bei set Pass=none!!
    Beides habe ich so nicht eingetragen, also wundert mich das nicht das die Anmeldung nicht funktioniert!
    Kannst du dir das irgendwie erklären?
    Bin sprachlos, habs mehrmals überprüft damit ich eh nichts falsches schreibe…..uff

    1. Ich hatte anfangs spekuliert, dass du womöglich den PXEServerTools Ordner nicht nach C:\ kopiert hast, aber das kann nicht sein, denn dann wäre die Startnet.cmd komplett leer und du hättest auch noch andere Fehlermeldungen beim Erstellen der WinPEs bekommen müssen. Denn in den originalen WinPE WIM-Dateien stehen da nur ein paar Zeilen drin. Außerdem passt das nicht zu deiner Aussage, dass deine neuen fertig gestellten WinPEs die Änderung enthalten.

      💡 Was aber sein kann ist, dass du schlicht das falsche WinPE lädst. Du weißt schon, dass du nach dem Erstellen mit CreateWinPE10_x86_x64.cmd, die erstellten WinPEs aus dem Ordner C:\PXEServer\BootSources, in das TFTP Verzeichnis images\Winpe\WinPE10.0 selbst transferieren und die alten überschreiben musst?

      Überprüfe daher einfach mal, wie der genaue Pfad von dem Eintrag lautet, den du die ganze Zeit zum Testen aus der PXE-Umgebung, aufrufst. Dahin hast du auch die neuen WinPEs kopiert? Falls du mir dies nun mit Ja beantwortest, kann ich dies ruhigen Gewissens mit: Lüge, beantworten. Denn wäre dem so, dann stünden die Änderungen auch in genau dieser geladenen WinPE.

      Du hast aber nicht schon wieder alles anders gemacht, als in der Anleitung stand und bist nun deswegen durcheinander gekommen? Genau deshalb sollte man das nicht machen. Verzeih mir.

      Viele Optionen bleiben da nicht übrig. Irgendwas davon wird es wohl sein.

  4. Also mir ist schon klar das wenn ich WinPEs erzeuge die dann in C:\PXEServer\BootSources und Iso landen auf die Synology kopiert werden müssen, da ja die zukünftigen neuen Rechner davon booten sollen.
    Nichts anderes habe ich gemacht, und nein ich habe deine Anleitung befolgt, ich wollte keine Kritik hier äussern sondern nur Fakten nüchtern darstellen.
    Wenn du das aber anders siehst tu es mir leid und ich Entschuldige mich dafür, dann werde ich aber auch Zukünftig meine Erfahrungen hier nicht mehr posten.
    Danke für deine Antworten und die tolle Arbeit hier.

    G Roland
    Ps. ich lüge niemals, das habe ich nicht notwendig!

    1. Ich habe das auch nicht als Kritik aufgefasst. Ich weiß auch echt nicht, wie du zu dieser Annahme kommst. Ich habe lediglich gesagt, dass wenn diese veränderten WinPEs wirklich über Netzwerk verteilt würden, dann wäre die Änderung auch in diesen geladenen WinPEs enthalten. Wie sonst erklärst du dir bitte, dass es eben nicht so ist? Die Aussage alleine ist schon eine Lüge, dass die veränderten WinPEs verteilt würden. Werden Sie ja eben nicht! Dafür gibt es keine andere Erklärung! Mal etwas lustig ausgedrückt: Da werden wohl kaum die Mainzelmännchen beim PXE Boot vorbeikommen, die angeforderten WinPEs mit der Kelle raus winken, die startnet.cmd austauschen, und Dir das Bär-Aufbind-WinPE zuschicken. Siehst du doch genauso, oder? 😀 Ich glaube auch nicht, dass wir hier bei der “Versteckten Kamera” sind 🙂

      In welchem Modus testest du das denn überhaupt die ganze Zeit? Welchen Eintrag startest du aus der PXE-Umgebung heraus und wie sieht der genaue Pfad zu diesem Eintrag aus (mit Codezeilen posten!)? Das hast du mir immer noch nicht beantwortet…

      Du hattest auch ganz am Anfang geschrieben, dass du den Pfad images\WinPE10.0\ verwendest. Darauf hatte ich dir dann geantwortet, dass dies ein Fehler in der Anleitung gewesen sei. Richtig wäre nämlich images\WinPE\WinPE10.0\ nach Anleitung. Das hatte ich dann nach deiner Meldung auch direkt geändert gehabt.

      Jetzt könnte man denken, wenn der Pfad nicht stimmt, dann dürfte der das WinPE nicht finden. Richtig? Falsch gedacht, denn wie gesagt hattest du den Pfad beim ersten Mal geändert. Danach sagtest du, dass du erneut die Anleitung durchgegangen wärst. Wenn das wirklich so ist, dann müsstest du nach meinem Verständnis einen Ordner:

      images\WinPE10.0\(Wenn du den nicht gelöscht hast) und images\WinPE\WinPE10.0\ im TFTP Root

      haben. In beiden werden dann die WinPEs liegen. Genau das ist nämlich die Schlussfolgerung deiner Geschichte. Du kopierst also deine Images nach meinem Verständnis entweder die ganze Zeit nach images\WinPE10.0\, der eingestellte Pfad in den Menüdateien öffnet aber das WinPE unter images\WinPE\WinPE10.0\ oder das Gegenteil ist der Fall. Das kannst du Dir jetzt aussuchen. Schau bitte genau nach! Wie gesagt, eine andere Erklärung gibt es nicht!

  5. Hallo Stefan,

    ersteinmal danke für deine erheblichen Mühen !
    Via (U)EFI funktioniert alles.

    Leider komme ich beim letzten Part, dem BIOS Modus nicht weiter.
    Beim Boot bekomme ich die folgende Meldung:

    “failed to load ldlinux.c32”

    Die Datei ist jedoch wie in deinem Blogbeitrag (https://www.german-syslinux-blog.de/synology-dsm-6-0-syslinux-6-04-pxetftpdhcp-server-einrichten/) beschrieben im tftproot hinterlegt.

    Hast du einen Schimmer was hier evtl schief ist ?

    Dank und Gruß,

    Daniel

    1. Du darfst nicht die aktuelle pre2 oder pre3 verwenden! Die funktionieren nicht richtig und sind fehlerbehaftet. Bleib bei der Syslinux 6.04-pre1 Version wie in der Anleitung auch verlinkt ist.

        1. Da muss irgendwo ein Fehler in den Konfigurationsdateien sein. Die Meldung, dass der Parameter –autofree nicht erkannt wird lässt jedenfalls Rückschlüsse darauf ziehen. Eventuell ist dir beim Bearbeiten ein Fehler unterlaufen und du hast vielleicht etwas nicht richtig editiert oder sogar gelöscht. Das kann ich natürlich von hier aus nicht beurteilen. Vergleiche daher bitte nochmal die originalen Dateien von mir mit deinen. Zeile für Zeile.

          Wie sieht die Datei: pxelinux.kpxe bei dir aus? Existiert die pxelinux.kpxe.cfg im selben Verzeichnis wie die pxelinux.kpxe? Hast du die pxelinux.kpxe.cfg deiner Umgebung angepasst?

  6. Hallo!
    ich nutze FreeNAS und habe ein Jail mit DNSMASQ eingerichtet.
    Das ganze funktioniert soweit und auch das iPXE Chainloading funktioniert.

    Im FreeNAS selbst habe ich ein DataSet eingerichtet, der via SMB und NFS freigeben wird.
    Ein weiteres DataSet ist nur das reine TFTP Boot Directory, welches die undionly.kpxe für das Chainloading enthält und eine ipxe.efi für UEFI Systeme. Dieses wird automatisch in das Jail gemountet. Auch hier funktioniert alles, sonst würde der PXE Boot ja nicht laufen 🙂

    Im DNSMASQ Jail wird ein apache2 gestartet, welcher die iPXE Konfiugration zur Verfügung stellt.
    Die Konfig:
    #!ipxe

    cpuid –ext 29 && set arch _64 || set arch
    set server_ip 192.168.178.39 # IP des DNSMASQ Jails
    set nfs_server 192.168.178.34 # IP des parent System ; Freigabe des NFS Shares mit den Images und co.
    set nfs_path /mnt/DataPool/ekPXE/PXEImages
    set menu-url http://${server_ip}
    set base-url ${menu-url}/Images/

    chain –replace –autofree ${menu-url}/autoscooter.ipxe

    ##################################

    In der Autoscooter.ipxe steht die eigentliche Konfiguration für die Images.
    Unter anderem der Part mit Windows 10
    :windows10-x64
    echo Starte WinPE 10.0 64-Bit
    #sanboot –no-describe –drive 0x81 ${base-url}/Windows10_x64_GER.iso || goto failed
    set full_nfs nfs://${nfs_server}:${nfs_path}/

    kernel ${full_nfs}wimboot
    initrd ${full_nfs}bootx64.efi
    initrd –name BCD ${full_nfs}Boot/BCD_Wimboot
    initrd ${full_nfs}Boot/boot.sdi boot.sdi
    initrd –name boot.wim ${full_nfs}Winpe/WinPE10.0/WinPE_x64.wim
    boot || goto failed
    goto start

    ############
    Der Prozess zeigt auch an, dass die Dateien geladen werden, aber nach dem Laden der WinPE_x64.wim folgenden Fehler:
    Bad CPIO magic
    FATAL: could not extract initrd files

    Andere Images (z.B. Macrium) wird problemlos geladen.

    1. Hallo,

      der dort gezeigte Eintrag ist nur für UEFI Clients gedacht. Ich weiß jetzt auch nicht, ob du für jeden Modus ein eigenes Menü erstellt hast oder nicht, denn das geht aus deinem Text nicht hervor. Du kannst aber nicht die selben Einträge nehmen, um damit UEFI, als auch Legacy Clients zu bedienen.

      Der Abschnitt:

      kernel ${full_nfs}wimboot
      initrd ${full_nfs}bootx64.efi
      initrd –name BCD ${full_nfs}Boot/BCD_Wimboot
      initrd ${full_nfs}Boot/boot.sdi boot.sdi
      initrd –name boot.wim ${full_nfs}Winpe/WinPE10.0/WinPE_x64.wim
      boot || goto failed
      goto start

      ist nur zum Starten in einer UEFI Umgebung gültig.

      Für Legacy Clients müsste das in etwa so aussehen:

      kernel${full_nfs}wimboot
      initrd ${full_nfs}Boot/BCD_Wimboot BCD
      initrd ${full_nfs}Boot/boot.sdi boot.sdi
      initrd ${full_nfs}Winpe/WinPE10.0/WinPE_x64.wim boot.wim
      boot || goto failed
      goto start

      Der Fehler: Bad CPIO magic beruht meistens darauf, dass eine wichtige Ressource nicht gefunden wurde oder nicht korrekt geladen werden konnte. Beispielsweise, wenn versucht wird eine EFI Datei im Legacy Modus zu laden. Das kann nur fehlschlagen, auch wenn ansonsten alles richtig ist. Probiere es aus. Ich musste bei mir selber eine lange Zeit herumprobieren, bis das in allen Modi zuverlässig lief. Deshalb verlasse dich auch nicht auf mein Beispiel, denn dies ist an meine bestehende Situation angepasst. Zur Not kannst du dir ja mal die Dokumentation dazu ansehen. Die enthält auch genügend Beispiele. Die könntest du dir beim Hersteller von wimboot ansehen, um Klarheit zu erlangen.

      1. Hey Stefan,
        tatsache, du hast recht. Es war der Legacy Modus. Mir fehlte die Differenzierung im Bootvorgang ob UEFI oder Legacy.
        Ich habe das Script mal angepasst, nun klappt das Laden. Auch die Installationsroute, einfach top!

        Danke dir!

  7. Hallo Stefan,
    Klasse Tutorial. Super erklärt und mit den ganzen Kommentaren in den Scripten auch sehr lehrreich.
    Vielen Dank für Deine Mühe – It works like a Charm! 😉
    Werde noch versuchen das ganze mit nem DHCP-Proxy zu realisieren.
    Wenn ich erfolgreich bin, teile ich gerne meine Erfahrungen.
    Beste Grüße

      1. Danke, das hab ich nicht erkannt das dies ein Link ist.
        Habe nun alles gemacht wie es auf beiden Seiten steht.
        Habe nachdem nun alles abgearbeitet ist dann ein Test gestartet und bekomme den Fehler:
        “Failed to load COM32 file vesamenu.c32”
        Wo kann ich da schauen um das Problem zu lösen?
        Es wurde alles übernommen nur die IP zur DS und FB als Gateway wurde geändert.

  8. Guten Abend,

    ich habe ein Problem beim Ausführen der winpe_menu.cmd.
    Nachdem ich den cls Befehl mal entfernt habe, stellte ich fest,
    dass der Registry Eintrag, um festzustellen, ob es sich um ein UEFI oder
    BIOS-Boot handelt, nicht vorhanden ist. Gibt es dazu eine Lösung?

    LG
    Yannik

    1. Der Befehl funktioniert auch nur in einer WinPE Umgebung. Befandest du dich denn in einer als du das getestet hattest oder hast du das live unter deinem gestarteten Windows 10 getestet?

      1. Ich habe via Network-Boot gestartet und habe dann
        den Windows Service ausgewählt. Daraufhin habe ich WinPE mit Bootmgr gestartet.

        Dann wird ja die Verbindung zum Server getestet. Dann wird sollte ja die winpe_menu.cmd ausgeführt werden. Diese bricht aber direkt am Anfang ab, da der Wert in der Registry nicht ausgelesen werden kann.

        1. Da hat wohl jemand gemerkt, dass meine Fähigkeiten des Glaskugellesens nichts taugen 😛

          Also ich habe das jetzt sowohl auf BIOS, als auch auf UEFI Gerätschaften getestet und sowohl über den WBM, als auch über das Imagetool Wimboot läuft dies bei mir immer. Ich weiß also nicht, warum bei dir der Befehl nicht funktioniert. Ich nehme mal an, dass du dich an die Anleitung gehalten hast und auch die neueste ADK Version verwendest, richtig? Spontan fällt mir dazu keine vernünftige Erklärung oder gar Lösung ein. Der Key müsste jedenfalls existieren, wenn du ein über das Script erstelltes WinPE verwendest. Warum der nun in deinem speziellen Fall nicht existiert weiß ich nicht. Hast du das auf einem virtuellen oder “echten” Client getestet?

Schreibe einen Kommentar zu Stefan Saft Antworten abbrechen

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