Freigeben über


Aktualisieren von IoT Enterprise-Installationsmedien

In diesem Artikel richten Sie Ihre Medienaktualisierungsumgebung ein und sammeln alle Erforderlichen, die zum Aktualisieren der WinPE-Umgebung und des Hauptbetriebssystems erforderlich sind, Installieren von Treibern

Vorbereiten der Medienwartungsumgebung

  1. Starten Sie PowerShell mit Administratorrechten.
    Wir verwenden diese Instanz von PowerShell für den gesamten Wartungsprozess der Installationsmedien, um Updates anzuwenden und ggf. erforderliche Treiber zu integrieren, die nicht Teil des Windows-Installationsmediums sind.

    • Wählen Sie Start aus.
    • Geben Sie „PowerShell“ ein.
    • Klicken Sie mit der rechten Maustaste auf Windows PowerShell.
    • Wählen Sie Als Administrator ausführen aus.
  2. Erstellen von Ordnern zum Speichern von Dateien während der Medienwartung
    Verwenden Sie den PowerShell-Befehl New_Item, um die folgenden Ordner auf Ihrem Techniker-PC zu erstellen, um Dateien zu speichern, die während der Medienwartung erforderlich sind.

    c:\MediaRefresh: Übergeordneter Ordner zum Speichern von Dateien während der Medienwartung.
    c:\MediaRefresh\Out: Kopie der ursprünglichen Medien, die während der Wartung aktualisiert wurden
    c:\MediaRefresh\Packages\LCU: Neuestes kumulatives Update c:\MediaRefresh\Packages\SSU: Wartungsstapelupdate bei Bedarf
    c:\MediaRefresh\Drivers: Drittanbietertreiber.
    c:\MediaRefresh\Scripts: Benutzerdefinierte Installationsskripts c:\MediaRefresh\WIM: Arbeitsverzeichnis zum Aktualisieren von „boot.wim“ und „install.wim“

    md c:\MediaRefresh\Drivers
    md c:\MediaRefresh\Out
    md c:\MediaRefresh\Packages\LCU
    md c:\MediaRefresh\Packages\SSU
    md c:\MediaRefresh\Scripts
    md c:\MediaRefresh\WIM
    
  3. Kopieren von Dateien aus originalen Medien
    Kopieren Sie alle Dateien von den ursprünglichen Installationsmedien in c:\MediaRefresh\Out.

    1. Fahren Sie mit Schritt b. fort, wenn Sie über physische Medien verfügen. Andernfalls müssen Sie zuerst die Windows IoT Enterprise-Installations-ISO mit Mount-DiskImage bereitstellen und den Buchstaben des eingebundenen Laufwerks mit Get-Volume anzeigen.

      Mount-DiskImage -ImagePath <ISO Path> | Get-Volume
      

      Hierbei ist <ISO Path> ein vollqualifizierter Pfad zu Ihrer ISO.

      Notieren Sie sich den DriveLetter-Wert, da wir diesen im nächsten Schritt benötigen.

    2. Kopieren Sie Dateien aus den ursprünglichen Installationsmedien, die hier durch <DriveLetter> als c:\MediaRefresh\Out-Ordner mit Robocopy gekennzeichnet sind.

      robocopy <DriveLetter>:\ c:\MediaRefresh\Out /Copy:DT /e
      

      Wo <DriveLetter> befindet sich der Laufwerksbuchstabe, der mit der eingebundenen ISO-Datei verknüpft ist

    3. Verschieben Sie den Ordner boot.wim and install.wim von c:\MediaRefresh\Out\Sources zu c:\MediaRefresh\WIM, dem Arbeitsordner für die Aktualisierung der WIM-Dateien, mithilfe von Robocopy.

      robocopy c:\mediarefresh\out\sources c:\MediaRefresh\WIM *.wim /Mov
      
    4. Fahren Sie mit dem nächsten Schritt fort, wenn Sie keine ISO für den vorherigen Befehl eingebunden haben. Andernfalls müssen Sie die Einbindung der Windows IoT Enterprise-Installations-ISO mit Dismount-Diskimage aufheben.

      Dismount-DiskImage -ImagePath <ISO Path>  
      

      Hierbei ist <ISO Path> ein vollqualifizierter Pfad zu Ihrer ISO-Datei.

  4. Beziehen Sie Wartungspakete:

    Laden Sie die neueste kumulative Microsoft Servicing Update (MSU)-Datei in den c:\MediaRefresh\Packages\LCU-Ordner herunter.

    Wenn eine Servicing Stack Update (MSU)-Abhängigkeit erforderlich ist, laden Sie diese in den c:\MediaRefresh\Packages\SSU-Ordner herunter. Verwenden Sie die folgende Tabelle, um Updates für Ihre spezifische Version von Windows IoT Enterprise zu finden.

    Release Version Updateverlauf Updatekatalog
    Windows 11 IoT Enterprise LTSC 2024 [24H2] 26100 Updateverlauf anzeigen x64-Updates anzeigen
    ARM64-Updates anzeigen
    Windows 10 IoT Enterprise LTSC 2021 19044 Updateverlauf anzeigen X64-Updates anzeigen
    ARM64-Updates anzeigen
    Windows 10 IoT Enterprise LTSC 2019 17763 Updateverlauf anzeigen X64-Updates anzeigen
    Arm64-Updates anzeigen
    Windows 10 IoT Enterprise LTSC 2016 14393 Updateverlauf anzeigen x64-Updates anzeigen
    x86-Updates anzeigen
    Windows 10 IoT Enterprise LTSC 2015 10.240 Updateverlauf anzeigen X64-Updates anzeigen
    X86-Updates anzeigen
  5. [Optional] Sammeln von Drittanbietertreibern
    Platzieren Sie die für Ihr Gerät erforderlichen Drittanbietertreiber in einem nicht komprimierten Format in den Stammordner c:/MediaRefresh/drivers oder als Unterordner in c:/MediaRefresh/drivers.

  6. [Optional] Sammeln von Konfigurationsskripts
    Platzieren Sie Ihre Setupcomplete.cmd und ErrorHandler.cmd benutzerdefinierten Skripts, die während oder nach dem Windows Setup-Prozess ausgeführt werden, in den c:\MediaRefresh\Scripts-Ordner.

    Weitere Informationen finden Sie unter Hinzufügen eines benutzerdefinierten Skripts zu Windows Setup

Aktualisieren der Windows-Vorinstallationsumgebung (Windows Preinstallation Environment, WinPE)

Die Windows Preinstallation Environment (WinPE) ist in boot.wim den ursprünglichen Installationsmedien unter dem \sources-Ordner enthalten. In diesem Abschnitt werden wir schrittweise durch den Prozess der Aktualisierung boot.wim mit dem neuesten kumulativen Wartungsupdate geführt und bei Bedarf Treiber von Drittanbietern in die WinPE-Umgebung mit der Medienwartungsumgebung integriert.

  1. Mount WinPE boot.wim

    1. Der erste Schritt beim Aktualisieren der WinPE-Umgebung besteht darin, einen temporären Ordner mounted c:\mediarefresh mit dem PowerShell-Befehl New-Item zu erstellen

      MD c:\MediaRefresh\mounted
      
    2. Bevor wir das boot.wimUpdate durchführen können, müssen wir sicherstellen, dass das Datei-Attribut nicht auf ReadOnly festgelegt ist. Verwenden Sie den PowerShell-Befehl „Set-ItemProperty“, um das ReadOnly-Attribut zu entfernen.

      Set-ItemProperty -Path "c:\mediarefresh\wim\boot.wim" -Name IsReadOnly -Value $false
      
    3. Jetzt können wir das WinPE-Image bereitstellen, das unter boot.wim Index 2 gespeichert ist, indem wir den PowerShell-Befehl Mount-WindowsImage verwenden

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. Der Inhalt des winPE-Bilds, das boot.wim in Index 2 gespeichert ist, kann jetzt unter c:\mediarefresh\mounted angezeigt werden.

  2. Anwenden von Drittanbietertreibern auf WinPE
    Installieren Sie Drittanbietertreiber, die c:\mediarefresh\drivers Sie im Ordner gesammelt haben, unter c:\mediarefresh\mounted Verwendung des PowerShell-Befehls Add-WindowsDriver in WinPE.

    Hinweis

    Zu Testzwecken können Sie -ForceUnsigned benutzen, um unsignierte Treiber hinzuzufügen und die Anforderung, dass Treiber eine digitale Signatur haben müssen, außer Kraft setzen. Weitere Informationen zu den Treibersignaturanforderungen finden Sie unter Übersicht über Gerätetreiber und Bereitstellung.

    Add-WindowsDriver -Path "c:\mediarefresh\Mounted" -Driver "c:\mediarefresh\drivers" -Recurse
    
  3. Anwenden von Wartungsupdates auf WinPE
    Wenden Sie das neueste kumulative Update und seine Abhängigkeiten, die Sie in den c:\mediarefresh\packages-Ordner heruntergeladen haben, auf WinPE an c:\mediarefresh\mounted, indem Sie den PowerShell-Befehl Add-WindowsPackage verwenden. Dieser Vorgang kann mehrere Minuten dauern, stellt jedoch sicher, dass Das Windows-Image bereits das neueste Wartungsupdate angewendet hat.

    1. Wenden Sie zuerst die Abhängigkeit des Wartungsstapelupdates an.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
      
    2. Wenden Sie jetzt das neueste kumulative Update an.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU"
      

    Tipp

    Wenn Fehler 0x800f0823 auftreten, weist Ihr Wartungsupdate möglicherweise eine Abhängigkeit auf, die zuerst angewendet werden muss. Wenn Sie die Abhängigkeit bereits heruntergeladen haben, versuchen Sie, den obigen Befehl ein zweites Mal auszuführen. Wenn das Problem dadurch nicht behoben wird, müssen Sie möglicherweise eine zusätzliche Voraussetzung für Ihr Update herunterladen.

    • Notieren Sie sich die KB####### im Dateinamen des Updates in "c:\mediarefresh\packages".
    • Suchen Sie support.microsoft.com mit KB#######
    • Öffnen Sie das erste Thema, das mit dem Begriff „Voraussetzung“ übereinstimmt, und suchen Sie nach diesem Thema.
    • Laden Sie alle oben genannten Voraussetzungen herunter, und führen Sie den obigen Befehl erneut aus. Beachten Sie, dass Sie den Befehl möglicherweise zweimal ausführen müssen, damit die Voraussetzung zuerst angewendet werden kann.
    • Fahren Sie mit dem nächsten Schritt fort, nachdem der Fehler behoben wurde.
  4. Kopie aktualisiert Setup.exe
    Bevor Sie fortfahren, kopieren Sie die aktualisierte setup.exe von WinPE unterc:\mediarefresh\mounted\sources nach c:\mediarefresh\out\sources mithilfe von Robocopy.

    1. Zunächst müssen wir das ReadOnly-Attribut c:\mediarefresh\mounted\sources\setup.exe mithilfe des PowerShell-Befehls „Set-ItemProperty“ entfernen.

      Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false
      
    2. Nun können wir setup.exe von c:\mediarefresh\mounted\sources nach c:\mediarefresh\out\sources mithilfe von Robocopy kopieren.

      robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe
      
  5. Aufheben der Bereitstellung und Speichern von Änderungen an WinPE

    Um den Wartungsvorgang abzuschließen, verwenden Sie den PowerShell-Befehl Dismount-WindowsImage, um die Änderungen zu speichern.

    Wichtig

    Stellen Sie vor dem Ausführen des Dismount-WindowsImage-Befehls sicher, dass sie keine Datei-Explorer-Ansichten oder Befehlsfenster haben, die Inhalte anzeigen unter c:\mediarefresh\mounted. Wenn Sie die Bereitstellung nicht ausführen möchten, tritt ein Fehler auf.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. Temporärer Ordner löschen

    Nach erfolgreicher Bereitstellung von boot.wim können wir den temporären Ordner c:\mediarefresh\mounted mithilfe des PowerShell-Befehls Remove-Item entfernen.

    RD c:\MediaRefresh\mounted
    
  7. Veröffentlichen Boot.wim in out-Ordner

    Nun kopieren Sie die aktualisierte boot.wim von c:\mediarefresh\wim nach c:\mediarefresh\out\sources mithilfe von Robocopy.

    robocopy c:\mediarefresh\wim c:\mediarefresh\out\sources boot.wim
    

Die Windows Preinstall Environment (WinPE) gespeichert unter boot.wim und setup.exe beide unter c:\mediarefresh\out\sources\ sind vollständig aktualisiert.

Update Windows IoT Enterprise

Das Windows IoT Enterprise-Image ist in install.wim auf den ursprünglichen Installationsmedien unter dem \sources-Ordner enthalten. Im Abschnitt Vorbereiten der Medienwartungsumgebung haben wir install.wim in einen Arbeitsordner verschoben. In diesem Abschnitt werden wir schrittweise durch den Prozess der Aktualisierung install.wim mit dem neuesten kumulativen Wartungsupdate geführt und Treiber von Drittanbietern bei Bedarf vom Zielgerät mithilfe der Medienwartungsumgebung integriert. Nachdem das Update abgeschlossen ist, teilen Sie die install.wim Dateien in kleinere *.swm-Dateien auf, sodass sie in ein Flashlaufwerk kopiert werden können, das als FAT32 formatiert ist.

  1. Bereitstellen des Betriebssystems install.wim

    1. Der erste Schritt beim Aktualisieren der WinPE-Umgebung besteht darin, einen temporären Ordner mounted unter c:\mediarefresh mithilfe des PowerShell-Befehls New-Item zu erstellen.

      MD c:\MediaRefresh\mounted
      
    2. Bevor wir die Datei install.wim aktualisieren können, müssen wir sicherstellen, dass das Dateiattribute nicht auf ReadOnly festgelegt ist. Verwenden Sie den PowerShell-Befehl „Set-ItemProperty“, um das ReadOnly-Attribut zu entfernen.

      Set-ItemProperty -Path "c:\mediarefresh\wim\install.wim" -Name IsReadOnly -Value $false
      
    3. Jetzt können wir das Windows IoT Enterprise-Image bereitstellen, das in install.wim unter Index 2 unter Verwendung des PowerShell-Befehls Mount-WindowsImage gespeichert ist

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. Der Inhalt des Windows IoT Enterprise-Imagespeichers in install.wim unter Index 2 ist jetzt sichtbar unter c:\mediarefresh\mounted.

  2. Installieren von Drittanbietertreibern
    Installieren Sie Treiber von Drittanbietern, die Sie in dem c:\mediarefresh\drivers-Ordner gesammelt haben, in das Betriebssystem-Image unter c:\mediarefresh\mounted mit dem PowerShell-Befehl Add-WindowsDriver. Der -recurse-Parameter ermöglicht die Verarbeitung von Unterordnern.

    Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse 
    

    Hinweis

    Zu Testzwecken können Sie -ForceUnsigned benutzen, um unsignierte Treiber hinzuzufügen und die Anforderung, dass Treiber eine digitale Signatur haben müssen, außer Kraft setzen. Weitere Informationen zu den Treibersignaturanforderungen finden Sie unter Übersicht über Gerätetreiber und Bereitstellung.

  3. Hinzufügen von benutzerdefinierten Setupskripts

    1. Erstellen Sie vor dem Hinzufügen von benutzerdefinierten Setupskripts zum Betriebssystemimage zuerst einen scripts-Ordner unter c:\mediarefresh\mounted\windows\setup\ Verwendung des PowerShell-Befehls New-Item.

      MD c:\mediarefresh\mounted\windows\setup\scripts
      
    2. Kopieren Sie Skripts von c:\mediarefresh\scripts nach c:\mediarefresh\mounted\windows\setup\scripts mithilfe von Robocopy.

      robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd
      
  4. Anwenden von Wartungspaketen auf das Betriebssystemimage
    Wenden Sie das neueste kumulative Update und seine Abhängigkeiten, die Sie in den c:\mediarefresh\packages-Ordner heruntergeladen haben, auf WinPE an c:\mediarefresh\mounted, indem Sie den PowerShell-Befehl Add-WindowsPackage verwenden.

    1. Wenden Sie zuerst die Abhängigkeit des Wartungsstapelupdates an.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
      
    2. Wenden Sie jetzt das neueste kumulative Update an.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU"
      

    Tipp

    Wenn Fehler 0x800f0823 auftreten, weist Ihr Wartungsupdate möglicherweise eine Abhängigkeit auf, die zuerst angewendet werden muss. Wenn Sie die Abhängigkeit bereits heruntergeladen haben, versuchen Sie, den obigen Befehl ein zweites Mal auszuführen. Wenn das Problem dadurch nicht behoben wird, müssen Sie möglicherweise eine zusätzliche Voraussetzung für Ihr Update herunterladen.

    • Notieren Sie sich die KB####### im Dateinamen des Updates in "c:\mediarefresh\packages".
    • Suchen Sie support.microsoft.com mit KB#######
    • Öffnen Sie das erste Thema, das mit dem Begriff „Voraussetzung“ übereinstimmt, und suchen Sie nach diesem Thema.
    • Laden Sie alle oben genannten Voraussetzungen herunter, und führen Sie den obigen Befehl erneut aus. Beachten Sie, dass Sie den Befehl möglicherweise zweimal ausführen müssen, damit die Voraussetzung zuerst angewendet werden kann.
    • Fahren Sie mit dem nächsten Schritt fort, nachdem der Fehler behoben wurde.
  5. Speichern und Aufheben der Bereitstellung aktualisierter install.wim
    Um den Wartungsvorgang abzuschließen, verwenden Sie den PowerShell-Befehl Dismount-WindowsImage, um die Änderungen zu speichern.

    Wichtig

    Stellen Sie vor dem Ausführen des Dismount-WindowsImage-Befehls sicher, dass sie keine Datei-Explorer-Ansichten oder Befehlsfenster haben, die Inhalte anzeigen unter c:\mediarefresh\mounted. Wenn Sie die Bereitstellung nicht ausführen möchten, tritt ein Fehler auf.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. Temporärer Ordner löschen mounted
    Nach erfolgreicher Bereitstellung von boot.wim können wir den temporären Ordner c:\mediarefresh\mounted mithilfe des PowerShell-Befehls Remove-Item entfernen.

    RD c:\mediarefresh\mounted
    
  7. Teilen von WIM zur Unterstützung des FAT32-Dateisystems
    Um sicherzustellen, dass die neue install.wim auf Flash-Medien passt, die als FAT32 formatiert sind, mit einer maximalen Dateigröße von 4 GB teilen Sie die Windows Image-Datei (install.wim) in eine Reihe kleinerer (SWM)-Dateien mit einer maximalen Größe von 4000 MB mit dem PowerShell-Befehl Split-WindowsImageauf. Die resultierenden *.swm Dateien werden in den c:\mediarefresh\out\sources-Ordner geschrieben.

    Split-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -SplitImagePath "c:\mediarefresh\out\sources\install.swm" -FileSize 4000 -CheckIntegrity
    

Das Betriebssystem-Installations-Image, das ursprünglich als install.wim gespeichert wurde unter c:\mediarefresh\out\sources\ als install.swm und install2.swm wird nun unter und gespeichert, die das Setup so verwendet, als wären sie das Original install.wim.

Kopieren aktualisierter Medien auf Flashlaufwerk

Wenn Sie kein startbares Flashlaufwerk erstellt haben, führen Sie dies aus, bevor Sie die Schritte zum Installieren von Windows von einem Flashlaufwerkausführen.

Der letzte Schritt bei der Erstellung Ihres aktualisierten Installationsmediums besteht darin, den Inhalt von c:\mediarefresh\out mithilfe von Robocopy auf Ihr bootfähiges Flash-Laufwerk zu kopieren.

robocopy c:\mediarefresh\out <DriveLetter>:\ /e

Wo <DriveLetter> befindet sich der Laufwerkbuchstaben, der Ihrem Flashlaufwerk zugeordnet ist

Installieren von Windows auf dem neuen Gerät

  1. Schließen Sie das Flashlaufwerk mit Ihrem Zielgerät an.

  2. Schalten Sie das Gerät ein und drücken Sie die Taste, die das Auswahlmenü für das Boot-Gerät des Computers öffnet, z. B. die Tasten Esc/F10/F12. Wählen Sie die Option, die das Gerät vom Flash-Laufwerk bootet.

    Windows-Setup startet. Folgen Sie den Anweisungen, um Windows zu installieren

    Tipp

    Möglicherweise müssen Sie sich an die Anweisungen des Geräteherstellers wenden, um sie für den Start vom Flashlaufwerk zu konfigurieren, das dieses Verfahren auf Ihrem Gerät nicht funktioniert.

  3. Sobald die erste Phase des Setups abgeschlossen ist und das Gerät neu gestartet wird, startet das Setup ggf. von Neuem. Wenn das Setup erneut startet, brechen Sie das Setup ab, fahren den Computer herunter, entfernen das Flash-Laufwerk und schalten das Gerät ein, um mit der nächsten Phase des Setups fortzufahren.

    Tipp

    Wenn aus irgendeinem Grund während des Setupvorgangs ein Fehler auftritt, lesen Sie die folgenden Artikel zur Problembehandlung.

Vollständiges Skript

Dieser Abschnitt enthält ein vollständiges Skript, das alle Medienwartungsschritte automatisch nacheinander ausführt. Bevor Sie dieses Skript verwenden, müssen Sie die Schritte im Abschnitt Vorbereiten der Medienwartungsumgebung dieses Artikels abschließen. Nachdem Sie fertig sind, kopieren Sie das folgende PowerShell-Skript in c:\mediarefresh\mediarefresh.ps1..

$LogFile = ".\MediaRefresh.log"
$LogDetail = ".\MediaRefreshDetail.log"

"================================================" >> $LogFile
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Starting MediaRefresh" >> $LogFile
"================================================" >> $LogFile
Write-Host "Updating Boot.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Boot.wim Update Started" >> $LogFile
Write-Host "     Preparing to mount boot.wim" -ForegroundColor Blue

(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Checking for existing .\Mounted folder" >> $LogFile

if ( -not (Test-Path -Path 'c:\MediaRefresh\mounted' -PathType Container)) { 
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Create .\Mounted folder" >> $LogFile
   MD c:\MediaRefresh\mounted >> $LogDetail
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Created .\Mounted folder" >> $LogFile
   }
   else {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\Mounted folder already existed" >> $LogFile 
   }

Write-Host "     Setting boot.wim file attributes to read-write" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Setting boot.wim file attributes to read-write" >> $LogFile
Set-ItemProperty -Path "c:\mediarefresh\wim\boot.wim" -Name IsReadOnly -Value $false | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Set boot.wim file attributes to read-write" >> $LogFile

Write-Host "     Mounting boot.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage boot.wim Started" >> $LogFile
Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage boot.wim Completed" >> $LogFile

Write-Host "     Installing Drivers" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to boot.wim Started" >> $LogFile
Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to boot.wim Completed" >> $LogFile

Write-Host "     Installing Servicing Stack Update" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to boot.wim Started" >> $LogFile
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to boot.wim Completed" >> $LogFile

Write-Host "     Installing Latest Cumulative Update" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to boot.wim Started" >> $LogFile
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to boot.wim Completed" >> $LogFile

Write-Host "     Setting read-write attribute on \out\sources\setup.exe" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Setting \out\sources\setup.exe file attributes to read-write" >> $LogFile
Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Set \out\sources\setup.exe file attributes to read-write" >> $LogFile

Write-Host "     Copying updated setup.exe to \out\sources" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy updated setup.exe to .\out\sources Started" >> $LogFile
robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy updated setup.exe to .\out\sources Completed" >> $LogFile

Write-Host "     Saving and dismounting boot.wim" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage boot.wim Started" >> $LogFile
Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save -CheckIntegrity -LogLevel 3 >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage boot.wim Completed" >> $LogFile

Write-Host "     Removing \Mounted folder" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Removing .\mounted folder" >> $LogFile
RD c:\mediarefresh\mounted | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\mounted folder removed" >> $LogFile

Write-Host "     Copying updated boot.wim to \out\sources" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy boot.wim to .\out\sources Started" >> $LogFile
robocopy c:\mediarefresh\wim c:\mediarefresh\out\sources boot.wim | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy boot.wim to .\out\sources Completed" >> $LogFile
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Boot.wim Update Completed" >> $LogFile
Write-Host "Updating Boot.wim Complete" -ForegroundColor Blue

Write-Host "Updating Install.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Install.wim Update Started" >> $LogFile
Write-Host "     Preparing to mount install.wim" -ForegroundColor Blue

(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Checking for existing .\Mounted folder" >> $LogFile

if ( -not (Test-Path -Path 'c:\MediaRefresh\mounted' -PathType Container)) { 
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Create .\Mounted folder" >> $LogFile
   MD c:\MediaRefresh\mounted  >> $LogDetail
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Created .\Mounted folder" >> $LogFile
   }
   else {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\Mounted folder already existed" >> $LogFile 
   }

Write-Host "     Setting read-write attribute on install.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Setting install.wim file attributes to read-write" >> $LogFile
Set-ItemProperty -Path "c:\mediarefresh\wim\install.wim" -Name IsReadOnly -Value $false | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Set install.wim file attributes to read-write" >> $LogFile

Write-Host "     Mounting install.wim" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage install.wim Started" >> $LogFile
Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage install.wim Completed" >> $LogFile


Write-Host "     Installing Drivers" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to install.wim Started" >> $LogFile
Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse  >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to install.wim Completed" >> $LogFile

Write-Host "     Creating folder \Windows\Setup\Scripts" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Checking for existing \windows\setup\scripts folder" >> $LogFile
if ( -not (Test-Path -Path 'c:\mediarefresh\mounted\windows\setup\scripts' -PathType Container)) {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Create \windows\setup\scripts folder" >> $LogFile
   MD c:\mediarefresh\mounted\windows\setup\scripts >> $LogDetail
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Created \windows\setup\scripts folder" >> $LogFile
   }
   else {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     \windows\setup\scripts already existed" >> $LogFile 
   }

Write-Host "     Copying Scripts to \Windows\Setup\Scripts" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy scripts to \windows\setup\scripts Started" >> $LogFile
robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy scripts to \windows\setup\scripts Completed" >> $LogFile

Write-Host "     Installing Servicing Stack Update" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to install.wim Started" >> $LogFile
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"  >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to install.wim Completed" >> $LogFile 

Write-Host "     Installing Latest Cumulative Update" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to install.wim Started" >> $LogFile 
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to install.wim Completed" >> $LogFile 

Write-Host "     Saving and dismounting install.wim" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage install.wim Started" >> $LogFile
Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save -CheckIntegrity -LogLevel 3 >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage install.wim Completed" >> $LogFile

Write-Host "     Removing \Mounted folder" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Removing .\mounted folder" >> $LogFile
RD c:\mediarefresh\mounted | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\mounted folder removed" >> $LogFile

Write-Host "Updating Install.wim Complete" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Install.wim Update Completed" >> $LogFile

Write-Host "Splitting Install.wim" -ForegroundColor Blue
Write-Host "     Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Split-WindowsImage Started" >> $LogFile
Split-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -SplitImagePath "c:\mediarefresh\out\sources\install.swm" -FileSize 4000 -CheckIntegrity >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Split-WindowsImage Completed" >> $LogFile

Write-Host "Update Complete" -ForegroundColor Blue
Write-Host "Copy contents of c:\mediarefresh\out to your flash drive" -ForegroundColor Blue

Weitere Ressourcen