PowerShell in Windows PE integrieren

    Windows PEDas Windows Prein­stallation Environ­ment (WinPE) ist ein spar­tanisch ausge­stattetes Mager-Windows, das man für das Deploy­ment des Betriebs­systems und für das Trouble­shooting als Basis von WinRE benötigt. Nicht mit an Bord ist PowerShell, das man aber als Optional Component nachrüsten kann.

    Startet man den Rechner von Windows PE, dann landet man auf der Kommando­zeile der alten Eingabeauf­forderung. PowerShell steht standardmäßig nicht zur Verfügung und lässt sich nachträglich auch nicht mehr installieren. Vielmehr muss man das tun, bevor man WinPE auf einen bootfähigen Datenträger kopiert.

    Remoting und PowerShell_ISE fehlen

    PowerShell für WinPE umfasst die meisten Module und Features eines vollständigen Windows. Ausgenommen davon sind das Remoting und die grafische Umgebung PowerShell_ISE. Zusätzlich zur Basisin­stallation von PowerShell gibt es noch ergänzende Optional Components, die Cmdlets für das Management von Laufwerken, Secure Boot, DISM und zum Auslesen der Platform ID enthalten.

    Windows PE ist bekanntlich ein Bestandteil des ADK, zu dessen Lieferumfang auch die Optional Components gehören. Sie werden mit Hilfe von DISM in das WIM-Abbild übertragen, bevor man das Preinstallation Environment auf einen Datenträger schreibt.

    WinPE in ein temporäres Verzeichnis kopieren

    Im ersten Schritt ruft man mit administrativen Rechten die vom ADK-Setup eingerichtete Verknüpfung zu einer angepassten Kommando­zeile auf.

    Eingabeaufforderung für das Windows ADK mit eigenen Umgebungsvariablen.

    Sie enthält eine Umgebungs­variable mit dem Namen %WinPERoot%, die das Wechseln zum PE-Verzeichnis beschleunigt:

    cd %WinPERoot%

    Dort nutzt man die Batch-Datei copype.cmd, um die benötigte Version von WinPE (x86 = 32-Bit, amd64 = 64-Bit) in ein Arbeitsverzeichnis zu kopieren:

    copype x86 c:\users\me\temp\pe

    boot.wim mit DISM mounten

    Anschließend wechselt man in dieses Arbeitsverzeichnis und mountet mit DISM die Datei boot.wim, die sich im Unter­verzeichnis media\sources befindet:

    dism /mount-image /ImageFile:Media\Sources\boot.wim /Index:1 /MountDir:mount

    Nun fügt man dem WIM-Archiv drei Pakete, die sich im ADK unterhalb des PE-Ordners befinden, plus die dazugehörigen deutschen Sprachdateien hinzu. Sie müssen in genau dieser Reihenfolge installiert werden:

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\WinPE-WMI.cab"

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\de-de\WinPE-WMI_de-de.cab"

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\WinPE-NetFx.cab"

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\de-de\WinPE-NetFx_de-de.cab"

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\WinPE-PowerShell.cab"

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\de-de\WinPE-PowerShell_de-de.cab"

    Diese Aufrufe gehen davon aus, dass es sich in boot.wim um eine 32-Bit-Version des Betriebs­systems handelt, für die 64-Bit-Variante müsste man im Pfad das "x86" durch "amd64" ersetzen.

    Cmdlets für DISM und Secure Boot

    Möchte man noch die oben genannten Cmdlets für Disk-Management, Secure Boot oder DISM hinzufügen, dann geht man nach dem gleichen Muster vor:

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\WinPE-StorageWMI.cab"

    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\x86\WinPE_OCs\de-de\WinPE-StorageWMI_de-de.cab"

    Die Dateinamen für DISM lauten WinPE-DismCmdlets.cab, für Secure Boot WinPE-SecureBootCmdlets.cab und für Platform ID WinPE-PlatformID.cab. Die deutschen Sprachdateien sind in /de-de/ und heißen WinPE-DismCmdlets_de-de.cab, WinPE-SecureBootCmdlets_de-de.cab und WinPE-PlatformID_de-de.cab.

    Zum Abschluss schreibt man die Änderungen in das Abbild zurück und beendet die Bereitstellung:

    dism /unmount-image /MountDir:mount /commit

    Änderungen mit DISM in boot.wim zurückschreiben

    Nun kann man WinPE mit MakeWinPEMedia.cmd auf DVD brennen bzw. auf einen USB-Stick kopieren (siehe dazu die auch für WinPE 10 noch gültige Anleitung: Windows PE 4.0 auf USB-Stick oder CD installieren).

    5 Kommentare

    Bild von Günter Niemann
    Günter Niemann sagt:
    30. August 2016 - 7:01

    Guten Tag!

    Als ich versuche, das Beschriebene nachzubauen, fällt mir auf, dass im ADK 10.1.14393.0

    • WinPE-SecureBootCmdlets_de-de.cab
    • WinPE-PlatformId_de-de.cab

    für beide Architekturen fehlen.

    Gruß,
    Günter Niemann

    Bild von Günter Niemann
    Günter Niemann sagt:
    30. August 2016 - 11:24

    Guten Tag!

    Nachtrag:
    Aus dem Screenshot ersehe ich, dass DISM v10.0.10586.0 und wohl auch das dazugehötige ADK benutzt wurden.
    Das erklärt möglicherweise das Fehlen zweier DE-CABs in der aktuellen Version des des ADK.
    Was in beiden Versionen wegen falscher Syntax scheitern dürfte:
    Im Abschnitt "Cmdlets für DISM und Secure Boot" fehlen bei den Kommandos die schließenden Anführungszeichen am Schluss der beiden Zeilen.

    Gruß,
    Günter Niemann

    Bild von Wolfgang Sommergut
    31. August 2016 - 13:19

    Hallo Herr Niemann, danke für den Hinweis auf die fehlenden Anführungszeichen! Ich habe sie nun ergänzt.

    Zu den zwei CAB-Dateien kann ich Moment nichts sagen, weil ich das neueste ADK noch nicht installiert habe.

    Bild von test
    test sagt:
    5. Oktober 2017 - 15:06

    Das ganze als Batch Datei:

    REM https://www.windowspro.de/wolfgang-sommergut/powershell-windows-pe-integ...
    REM Benötigt ADK Setup https://developer.microsoft.com/de-de/windows/hardware/windows-assessmen...
    REM Mit Admin Rechten starten

    @ECHO OFF
    CHCP 1252

    C:
    IF NOT EXIST C:\PEDVDErstellung mkdir PEDVDErstellung

    cd C:\PEDVDErstellung

    %WinPERoot%\copype amd64 c:\PEDVDErstellung

    dism /mount-image /ImageFile:Media\Sources\boot.wim /Index:1 /MountDir:mount
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\WinPE-WMI.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\de-de\WinPE-WMI_de-de.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\WinPE-NetFx.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\de-de\WinPE-NetFx_de-de.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\WinPE-PowerShell.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\de-de\WinPE-PowerShell_de-de.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\WinPE-StorageWMI.cab"
    Dism /Image:mount /Add-Package /PackagePath:"%WinPERoot%\amd64\WinPE_OCs\de-de\WinPE-StorageWMI_de-de.cab"
    dism /unmount-image /MountDir:mount /commit

    MakeWinPEMedia /iso /f C:\PEDVDErstellung C:\PEDVDErstellung\startdvd.iso

    Bild von test
    test sagt:
    6. Oktober 2017 - 9:09

    Wie kann ich eine Batch Datei nach dem Hochfahren automatisch starten lassen?

    Und weshalb bekomme ich nicht die deutsche Tastaturbelegung wenn ich chcp 1252 eingebe? Es kommt keine Fehlermeldung aber auch keine Umlaute.