Windows PE
- Einführung
- Windows PE
- PE basierte Produkte
- PE beziehen und lizensieren
- Funktionsweise
- Erstellung eines PE Images
- Download und Installation
- Basis Image kopieren und erweitern
- ISO Image und/oder USB Stick
- PE-Image erweitern
- Portable Anwendungen
- Eigene Start-Routine
- Installation von PE mit Bootmanager
- UEFI Setup mit BCDEdit
- Windows 10 manuell einrichten
- Weiterführende Links
Einführung
Microsofts Betriebssystem Windows
ist heute nicht nur ein Betriebssystem, sondern auch eine riesige Ansammlung
von Code aus vergangenen Tagen.
Das System soll uns garantieren, dass uralte Programme mit lange überholten
Schnittstellen ebenso noch laufen, wie die neueste modernste App.
Daher kennen wir Windows nur von einer großen Installation auf der
Festplatte, wo anfangs 10 Gigabyte und später immer mehr Speicher für die
vielen Komponenten und Updates benötigt werden.
Doch der Windows Kern ist dagegen überschaubarer und viel kleiner. Lässt man
die ganzen alten Kompatibilitätscodes und Anwenderprogramme weg, dann erhält man:
Windows PE
Das Preinstallation Environment,
kurz PE
ist ein kleiner Mini-Windows Kern, der nur die nötigsten
Schnittstellen und einige Standard-Treiber beinhaltet.
Es passt daher mit zwischen 100 und 300 Megabytes locker auf eine CD oder
USB Stick.
Normalerweise dient Windows PE vor allem für die Abwickelung einer
gewöhnlichen Windows Installation.
Man bootet Windows PE von einer DVD oder einem USB Stick und von dort
aus wird ein Standard-Windows Image auf die Festplatte kopiert.
Wir können aber aus diesem Mini-Windows unser eigenes kleines angepasstes
Betriebssystem machen.
Darauf werden zwar keine großen Anwendungen wie Office oder Datenbankserver
laufen (diese brauchen eben doch ein vollständiges Windows), aber wir
können kleinere Programme wie Browser, Netzwerk- oder Reparatur-Tools
meist ohne Probleme damit betreiben.
PE basierte Produkte
Viele üblichen Windows Tools benutzen Windows PE für Operationen,
die in einem normalen Windows nicht möglich sind.
- Partitionierungstools, die Laufwerk C: verändern sollen.
Hier wird vom normalen Windows ins PE System gebootet, von dort
aus die Änderung durchgeführt und anschließend wieder zum normalen
Windows gewechselt.
- Virus Scanner und Anti-Virus Programme
Auch hier gibt es oft die Möglichkeit das normale Windows
“von außen” zu scannen.
- Datenrettung
Wenn Dateien verloren gegangen sind, können sie mit speziellen
Werkzeugen teilweise oder auch vollständig wiederhergestellt
werden. Aber nur, wenn keine anderen störenden Programme parallel
arbeiten. Daher wird auch hierfür Windows PE genutzt.
PE beziehen und lizensieren
Windows PE kann man nicht “im Laden” kaufen, sondern seine Komponenten
sind Teil des
“Assessment und Deployment Kit”,
kurz ADK
. Früher wurde diese Software unter dem Namen
“Automated Installation Kit” kurz AIK
vertrieben.
In den neuesten Versionen des ADK ist Windows PE nicht mehr direkt enthalten,
sondern man muss es als “Add-on” nach dem ADK separat installieren.
Darin befinden sich das Basis-Image und noch einige weitere Bestandteile,
die man in das kleine Windows-Image integrieren oder weglassen kann.
Beispiel: dotNet Framework
oder Scripting-Unterstützung.
Nutzen darf man das ADK und Windows PE nur, wenn man eine normale
Windows Lizenz für ein vollständige Windows Installation gekauft hat.
Es ist also nicht erlaubt, das kleine Mini-Windows bei Bekannten oder
seinen Kunden für die tägliche Arbeit zu nutzen.
Man darf es aber parallel zum Experimentieren oder für analytische
Zwecke privat nutzen.
Funktionsweise
Windows PE arbeitet im Normalfall mit einem RAM-Abbild anstatt mit
der Festplatte.
Weil dieses Windows klein genug ist, werden alle Dateien beim Booten
in den Speicher geladen und über das virtuelle RAM-Laufwerk “X:"
bereitgestellt und nicht unter “C:" wie bei einer normalen Windows Installation.
Das bedeutet auch, dass Änderung an diesem Windows mit dem nächsten Neustart
verloren gehen, weil die Daten alle im RAM liegen und nicht automatisch auf
das Bootmedium zurückgeschrieben werden.
Wenn man aber Dokumente und Dateien auf z.B. einem USB Stick ablegt, überleben
diese natürlich den Neustart und somit eignet sich PE durchaus auch als
Notfallsystem, mit dem auch Online arbeiten kann.
Hardwareseitig werden viele Basistreiber und Kernfunktionen eines PCs durch
Windows PE betrieben. Neben Grafik, Festplatte und Netzwerk, kann man auch
weitere Treiber integrieren.
Es fehlt jedoch an speziellen Programmen, die erweiterte Hardware ansteuern
können. z.B.: Bluetooth, Audio oder andere Multimedia-Geräte.
Vor allem ist es durchaus schwierig deren Treiber in das System zu integrieren
und braucht zusätzliches Fachwissen dafür.
Daher ist es anfangs sinnvoll sich nur auf rudimentäre Aufgaben zu beschränken.
Windows PE kann übrigens entweder als 32-bit oder als 64-bit System genutzt
werden, doch man kann nicht wie in einem normalen Windows mit einem 64-bit
System auch 32-bit Programme nutzen. Hier muss man sich im Vorfeld entscheiden
und kann dann entweder nur 32-bit oder nur 64-bit Anwendungen einsetzen.
Erstellung eines PE Images
Kurz zusammengefasst, sieht der Ablauf in etwas so aus.
- Download und Installation des ADK mit PE-Support
- Öffnen der PE-Kommandozeile
- Per
copype
Script wird ein neues PE-Image in einem Verzeichnis angelegt
dism
mountet das PE WIM-Image in ein temporäres Verzeichnis
- Per
dism
werden zusätzlich Komponenten integriert (dotNet, WMI, Scripting)
- Per
dism
können weitere Treiber für Netzwerk oder Grafik integriert werden
- Das gemountete Image wird per
dism
wieder in die WIM-Datei zurückgespeichert.
- Mit dem
makewinpemedia
Script wird entweder eine ISO-Datei (für CDs) oder
der USB-Stick mit dem fertigen Windows PE aufbereitet.
Der nachfolgende Erstellungsprozess setzt Windows 10 voraus.
Viele Schritte sind auch unter Windows 8, teilweise auch unter Windows 7
durchführbar, jedoch können einzelne Schritte von der beschriebenen
Prozedur abweichen.
Download und Installation
Nach dem Download des Windows ADK in einer möglichst neuen Version
(z.B.: die Windows 10 1607)
wird dessen Installation gestartet. Hier muss man darauf achten, dass der Punkt
“Preinstallation Environment” bzw. “Bereitstellungsumgebung und/oder -werkzeuge”
mit installiert werden.
Danach befinden sich alle erforderlichen Dateien im Verzeichnis
C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment
sofern bei der Installation dieser Standard-Pfad nicht abgeändert wurde.
Im Startmenü sollte sich auch der Punkt
“Umgebung für Bereitstellungs- und Imageerstellungstools” auffinden lassen.
Dieser sollte als Administrator gestartet werden, womit man eine
cmd.exe
Konsole erhält, in welcher alle erforderlichen Pfade für
Windows PE vorkonfiguriert sind.
Basis Image kopieren und erweitern
Aus dem Verzeichnis in der zuvor geöffneten Konsole sollte man zuerst in das
PE-Verzeichnis wechseln, und zwar per
cd "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment"
Hier liegt nämlich das Script copype
, mit welchem die wichtigsten PE-Dateien
für ein neues Image in ein neues Arbeits-Verzeichnis zusammen kopiert werden können.
Das Script kann entweder ein 32-bit Image (x86) oder ein 64-bit Image (amd64)
erstellen. Ich wähle her stets 32-bit, weil es auch heute jede Software als
32-bit Version gibt, während nicht immer ein 64-bit Zwilling existiert.
Nennen wir daher unser Arbeitsverzeichnis einfach pe-x86
und führen daher
den Befehl
aus. Das Script kopiert die Boot-Dateien und das Basis-Image namens boot.wim
in das Unterverzeichnis c:\pe-x86\media
und c:\pe-x86\media\sources
.
Theoretisch könnten wir nun schon ein finales PE-Image fertigstellen, doch
diesem würde einige Komponenten fehlen und würde daher viele Anwendungsprogramme
nicht ausführen können.
Daher wird das Basis-Image boot.wim
in ein temporäres Verzeichnis “gemountet”,
als sein Inhalt darin bereitgestellt, damit wir es aktualisieren und verbessern
können.
Der Befehl:
1dism /Mount-Image /ImageFile:c:\pe-x86\media\sources\boot.wim /Index:1 /MountDir:d:\pe-x86\mount
tut genau das, und nachdem das Kommando abgearbeitet ist, können wir im
Verzeichnis d:\pe-x86\mount
alle Dateien und Verzeichnisse sehen, die im
Basis-Image enthalten sind.
Die angesprochenen fehlenden Komponenten befinden sich im Verzeichnis
C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs
daher sollt man mit
1cd C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs
nun dort hin wechseln.
Mit dem Kommando:
dism /Image:c:\pe-x86\mount /Add-Package /PackagePath:XXXXXX.cab
werden nun fehlenden Komponenten aus den CAB Dateien integriert.
Folgende halte ich für essentiell:
WinPE-WMI.cab
- WMI Unterstützung für Zugriff auf viele Systemeinstellungen
WinPE-Scripting.cab
- Unterstützung für VBScript und JavaScript für Automationsaufgaben
WinPE-NetFx.cab
- Das abgespeckte dotNet Framework für die Ausführung vieler
Anwendungsprogramme
WinPE-PowerShell.cab
- Die Windows Powershell zur effektiven Administration per Konsole
Weitere hilfreiche optionale Komponenten sind:
WinPE-HTA.cab
- Hypertext-Applikationen, also UIs per HTML und Javascript
WinPE-MDAC.cab
- Client-Zugriff auf Datenbanken
WinPE-PPPoE.cab
-Zusätzliche Netzwerkfunktionen für PPP over Ethernet
WinPE-RNDIS.cab
- Zusätzliche Netzwerkfunktionen für Remote NDIS
WinPE-EnhancedStorage.cab
- Zugang zu verschlüsselten Laufwerken und Bitlocker.
WinPE-FMAPI.cab
- Dateiverwaltung zur Wiederherstellung gelöschter Dateien
WinPE-StorageWMI.cab
- WMI Erweiterung für den Zugriff auf moderne Datenspeichertypen
Alle gewünschten CAB Dateien werden also der Reihe nach integriert,
wie im Beispiel:
dism /Image:c:\pe-x86\mount /Add-Package /PackagePath:WinPE-WMI.cab
Wenn wir damit fertig sind, müssen wir die neuen Komponentenupdates
vom mount
-Verzeichnis wieder in die WIM-Imagedatei zurückübertragen.
Und das erledigt das Kommando:
dism /UnMount-Image /MountDir:c:\pe-x86\mount /commit
ISO Image und/oder USB Stick
Die Dateien von Windows PE sind also fertig, nun wollen wir ein
korrektes Boot Medium erstellen:
Dafür nutzen wir wieder in der Konsole das Kommando:
makewinpemedia /iso c:\pe-x86 c:\WinPE10-x86.iso
um eine CD ISO-Image-Datei zu erhalten.
Danach kann die ISO-Datei auf eine CD oder DVD gebrannt werden.
Info: Intern wird das Tool oscdimg
benutzt um ISO Dateien
zu erzeugen. Dieses Programm kann man natürlich auch manuell
nutzen und mit erweiterten Parametern versehen.
Oder wir nutzen:
makewinpemedia /ufd c:\pe-x86 U:
um das Image auf den USB-Stick
(USB Flash Drive) mit Laufwerk U: zu übertragen (Wenn das USB-Laufwerk anders
heißen sollte, muss dies im Kommando natürlich berücksichtigt werden).
Hinweis: Der USB-Stick wird mit dieser Prozedur formatiert und vollständig gelöscht!
Damit ist unser Windows PE Image fertig und kann auf jedem beliebigen
Computer getestet werden, der von CD oder USB-Stick booten kann.
Nach dem Start sollte eine Windows Kommandozeile sichtbar werden (cmd.exe
).
Über welche man die wenigen anderen PE-Programme starten kann, wie z.B.:
taskmgr
, der Windows Task-Manager
notepad
, der Windows Editor
- PE hat keinen eigenen Explorer, aber man kann im Datei-Öffnen Dialog
von Notepad tatsächlich über das Kontextmenü Dateien kopieren
und Löschen … und schon haben wir ohne Zusatztools ein
paar Dateifunktionen gefunden.
PE-Image erweitern
Wenn wir das Arbeiten in Windows PE erleichtern wollen, können wir ein
paar externe Programme in integrieren, die uns Benutzeroberflächen für
administrative Aufgaben zur Verfügung stellen.
Portable Anwendungen
Einige Anwendungen besitzen so genannte “Portable” Varianten neben den
üblichen Installationspakten. Dies “portablen” Programme kopiert man
einfach in ein Unterverzeichnis, startet eine EXE und alles läuft.
Das ist für uns ein großer Vorteil, da Installationsroutinen von Fremdsoftware
unter Windows PE nicht funktionieren.
Eigene Start-Routine
Ohne Anpassungen beinhaltet der Windows PE Startprozess wpeinit
, welches
das System initialisiert und danach in einer Kommandozeile cmd.exe
endet.
Möchte man andere Tools ausführen, oder den Startprozess anpassen, muss man
im Image-Verzeichnis \Windows\System32
eine Datei namens winpeshl.ini
erstellen, die eine Liste von Kommandos führt, die beim Start hintereinander
ausgeführt werden. Es handelt sich dabei um eine INI Datei mit der Sektion
LaunchApps
und jeder Eintrag hat das Format:
ExecutablePath
+ ,
+ ProgramArguments
.
Es wird das Ende eines jeden Prozesses abgewartet, bevor der folgende
gestartet wird.
Und wenn alle Prozesse ausgeführt und beendet wurden, fährt das System
wieder automatisch herunter.
Hat man winpeshl.ini
erst einmal erstellt, wir die Initialisierung des
System nicht mehr automatisch ausgeführt.
Dies kann man durch Ausführung von wpeinit.exe
selbst auslösen.
Noch mehr Feinabstimmung erhält man, in dem man das Programm wpeutil
bedient und jeden Setup Schritt manuell mit spezifischen Parametern aufruft.
Mein Beispiel für X:\Windows\System32\winpeshl.ini
sieht so aus:
1 [LaunchApps]
2 wpeutil.exe, InitializeNetwork
3 wpeutil.exe, DisableFirewall
4 wpeutil.exe, WaitForRemovableStorage
5 wpeutil.exe, SetKeyboardLayout 0407:00000407
6 wpeutil.exe, SetMuiLanguage de-DE;en-US
7 wpeutil.exe, SetUserLocale de-DE;en-US
8 cmd.exe
Es führt folgende Schritte durch:
- Initialisierung der Netzwerkschicht
Danach sollten erkannte Netzwerkadapter online und eine IP Adresse verfügbar sein.
- Deaktivierung der Firewall
Damit reagiert das PE-System auch auf eintreffende Pings und es können
leichter Apps gestartet werden, die selbst Netzwerkdienste anbieten.
- Warten auf entfernbare Medien (wie CDs oder USB Sticks)
Das System wartet auf die Initialisierung aller Treiber um auf alle
Laufwerke zugreifen zu können.
- Deutsches Tastaturlayout setzen
Die LCID 0407:00000407
steht für eine typische deutsche Tastatur.
Ich könnte auch 0c07:00000407
für “German-Austria” nutzen …
doch meines Wissens sind beide Layouts identisch.
Die Schweiz hätte jedoch mit 0807:00000807
ein paar andere Tastenbelegungen.
- Setzen der Standardsprache auf “Deutsch”
SetMuiLanguage de-DE;en-US
Unterstützt eine App mehrere Sprachen, soll sie primär Deutsch und alternativ
Englisch interagieren.
- Setzen der Lokalisierung für Formate auf “Deutsch” mit
SetUserLocale de-DE;en-US
Nun sollten auch Zahlen- und Datumsformate für unsere Breiten “richtig”
angezeigt werden.
- Am Ende öffnet
cmd.exe
ein Konsolenfenster.
Natürlich kann man die wpeutil.exe
Schritte auch in einem Skript
zusammenfassen und dieses per LaunchApps
ausführen lassen.
Hinweis: SetKeyboardLayout
oder andere Spracheinstellungen werden immer
erst in danach gestarteten Prozessen wirksam. Öffnet man z.B. per start.exe
ein UI Programm parallel und lässt erst danach wpeutil.exe
arbeiten, so
erhält die zuvor gestartet App nicht die geänderten Sprach- oder Tastatur-
Einstellungen.
Weitere Ideen für LaunchApps
wären:
net use
um Netzlaufwerke einzubinden..
powershell
für das Arbeiten mit der Powershell.
cscript.exe
um Windows Scripting Host VBA oder Javascripts auszuführen.
hta.exe
um Hyper-Text-Applikationen auszuführen.
wmic.exe
um per WIM Systemeinstellungen zu ändern.
netsh.exe
um IP Adressen und Einstellungen anzupassen.
drvload.exe
um Treiber per INF Datei dynamisch zu laden.
Installation von PE mit Bootmanager
Man kann Windows PE auch fix auf einer Festplatte installieren und es wie ein
normales Windows 10 starten. Dafür muss man nur die Windows PE Dateien auf
eine Festplattenpartition übertragen und dann den Windows Bootmanager anlegen
(bzw erweitern) um das Windows Image beim Boot zu laden.
Ein solches PE-System kann parallel zu einer normalen Windows Installation
aufgesetzt werden und der Benutzer kann beim Start zwischen PE und dem
regulären Windows auswählen.
Tatsächlich nutzen diverse Reparatur-Tools und auch Antiviren Software diese
Methode um ein “paralleles Notfall-Windows” bereitzustellen von dem aus man
die reguläre Windows Installation reparieren oder aktualisieren kann.
UEFI Setup mit BCDEdit
Ein 64-Bit Windows PE wird am besten über UEFI
gebootet und ein solches Beispiel wird hier vorgeführt.
Wir starten mit einer leeren Festplatte und nutzen dort ein Windows PE 1809
für die feste Installation. Man erzeugt dafür am besten einen USB Stick
mit Windows PE und startet davon auf dem Zielsystem.
Sobald die Konsole bereit ist, wird mit diskpart
die Festplatte
eingerichtet:
Mit list disk
werden alle lokalen Speichermedien aufgelistet. Daraus
muss man die Nummer der gewünschten Festplatte auswählen.
Im Beispiel wird das 0
sein.
VORSICHT: Auch der USB Stick ist in der Liste und kann bei einigen System
als Nummer 0
erkannt werden. Das folgende select disk
muss dann angepasst
werden:
1 select disk 0
2 clean
3 convert gpt
4 create partition efi size=500
5 format fs=fat32 quick label=System
6 assign letter=S
7 create partition msr size=128
8 create partition primary size=8000
9 format fs=ntfs quick label=WinPE
10 assign letter=P
11 exit
Diese Kommandos bewirken:
- Anlegen einer EFI-Boot Partition mit 500 MB an, die dann mit FAT32
formatiert wird und als Laufwerk
S:
eingebunden wird.
- Anlegen einer 128 MB großen MSR (Microsoft-reserved) Partition
- Anlegen einer 8 GB Partition, die mit NTFS formatiert und als
Laufwerk
P:
eingebunden wird.
Nun kann auf der Konsole zum USB-Laufwerk gewechselt werden, das
wahrscheinlich im vorderen Bereich liegt (z.B.: C:
oder D:
).
Dort findet man unter sources\boot.wim
das PE-Image und dieses
kann nun auf Laufwerk P:
übertragen werden, also unsere zuvor
angelegt 8 GB Partition.
dism /Apply-Image /ImageFile:D:\sources\boot.wim /Index:1 /ApplyDir:P:\
Sobald dism
das PE Image von D:\sources\boot.wim
auf die Platte
übertragen hat, richtet man den Boot-Manager auf der EFI-Partition unter
S:
ein:
bcdboot P:\Windows /s S: /f UEFI
Jetzt kann man den USB-Stick abziehen und das System neu starten (in dem man
die laufenden PE-Konsole mit exit
beendet).
Wenn alles funktioniert hat, sollte der Bootmanager Windows PE nun von der
Festplatte booten. Die Partition (zuvor als P:
verfügbar) ist nun wie
üblich bei jedem PE Start als X:
erreichbar.
Das System liegt diesmal jedoch nicht im RAM, sondern lädt direkt vom
Datenträger. Es wird daher kein zusätzlicher Speicher für die RAM-Disk
benötigt.
Bei fix installierten PE Systemen, wo man weitere Apps nutzen möchte, kann
es Sinn machen eine Auslagerungsdatei anzulegen.
Das erreicht man über
wpeutil CreatePageFile /path=X:\pagefile.sys /size=2048
Eine solche Zeile kann man natürlich auch in die Datei
X:\Windows\System32\winpeshl.ini
eintragen, damit sie bei jedem PE-Start
ausgeführt wird.
Windows 10 manuell einrichten
Kann man also Windows PE von der Festplatte starten, so kann man von dieser
Installation aus recht einfach weitere Windows Installationen in zusätzlichen
Partitionen einrichten und dem Bootmanager anfügen.
So lässt sich per diskpart
einfach eine weitere Partition einrichten
1 select disk 0
2 create partition primary
3 assign letter=W
Dann stöpselt man einen Windows-Setup Stick ein und extrahiert per dism
einfach die Windows Installation auf die neu eingerichtete Partition.
dism /Get-ImageInfo /ImageFile:D:\sources\install.wim
zeigt alle Images mit Namen und Index an, die in einer WIM Datei enthalten
sind. Das gewünschte Windows Image kann dann per /Index
Parameter zur
Installation ausgewählt werden.
dism /Apply-Image /ImageFile:D:\sources\install.wim /Index:1 /ApplyDir:W:\
überträgt dann alle Dateien auf die neue Partition.
Nun muss der Bootmanager angepasst werden.
Dieser liegt auf der EFI-Partition unter /EFI/Microsoft/Boot/BCD
und
wir können die ansonsten versteckte EFI Partition mit
1 x:\>diskpart
2 select disk 0
3 select part 1
4 assign letter=S
5 exit
weder sichtbar machen.
bcdedit -store S:\EFI\Microsoft\Boot\BCD –create /d "Standard Windows" –application osloader
erstellt einen neuen Bootmanager eintrag und schreibt die GUID auf die Konsole.
Diese ID muss in den folgenden Zeilen dann eingefügt werden:
1 S:
2 cd S:\EFI\Microsoft\Boot
3 bcdedit –store BCD –set {GUID} osdevice partition=w:
4 bcdedit –store BCD –set {GUID} device partition=w:
5 bcdedit –store BCD –set {GUID} path \windows\system32\winload.efi
6 bcdedit –store BCD –set {GUID} systemroot \windows
7 bcdedit –store BCD –set {GUID} detecthal yes
8 Bcdedit –store BCD –displayorder {GUID} -addlast
Nach einem Neustart erscheint das Boot-Menü, wo man zwischen Windows PE und
dem neuen “Standard Windows” auswählen kann.
Wählt man die neue Windows Installation läuft dort die Neueinrichtung auf dem
PC durch.
Weiterführende Links
Die nachfolgenden Links wurden durch Suchanfragen im Internet gefunden und
sollen weitere Information zu Windows PE, dessen Setup und Tools liefern.
Sie stehen nicht im Zusammenhang mit dieser Dokumentation und opengate.at
übernimmt keine Haftung für deren Inhalt oder Aktualität.