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
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.
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
Kopieren von Dateien aus originalen Medien
Kopieren Sie alle Dateien von den ursprünglichen Installationsmedien inc:\MediaRefresh\Out
.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.
Kopieren Sie Dateien aus den ursprünglichen Installationsmedien, die hier durch
<DriveLetter>
alsc:\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 istVerschieben Sie den Ordner boot.wim and install.wim von
c:\MediaRefresh\Out\Sources
zuc:\MediaRefresh\WIM
, dem Arbeitsordner für die Aktualisierung der WIM-Dateien, mithilfe von Robocopy.robocopy c:\mediarefresh\out\sources c:\MediaRefresh\WIM *.wim /Mov
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.
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 anzeigenWindows 10 IoT Enterprise LTSC 2021 19044 Updateverlauf anzeigen X64-Updates anzeigen
ARM64-Updates anzeigenWindows 10 IoT Enterprise LTSC 2019 17763 Updateverlauf anzeigen X64-Updates anzeigen
Arm64-Updates anzeigenWindows 10 IoT Enterprise LTSC 2016 14393 Updateverlauf anzeigen x64-Updates anzeigen
x86-Updates anzeigenWindows 10 IoT Enterprise LTSC 2015 10.240 Updateverlauf anzeigen X64-Updates anzeigen
X86-Updates anzeigen[Optional] Sammeln von Drittanbietertreibern
Platzieren Sie die für Ihr Gerät erforderlichen Drittanbietertreiber in einem nicht komprimierten Format in den Stammordnerc:/MediaRefresh/drivers
oder als Unterordner inc:/MediaRefresh/drivers
.[Optional] Sammeln von Konfigurationsskripts
Platzieren Sie IhreSetupcomplete.cmd
undErrorHandler.cmd
benutzerdefinierten Skripts, die während oder nach dem Windows Setup-Prozess ausgeführt werden, in denc:\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.
Mount WinPE boot.wim
Der erste Schritt beim Aktualisieren der WinPE-Umgebung besteht darin, einen temporären Ordner
mounted
c:\mediarefresh
mit dem PowerShell-Befehl New-Item zu erstellenMD c:\MediaRefresh\mounted
Bevor wir das
boot.wim
Update 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
Jetzt können wir das WinPE-Image bereitstellen, das unter
boot.wim
Index 2 gespeichert ist, indem wir den PowerShell-Befehl Mount-WindowsImage verwendenMount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
Der Inhalt des winPE-Bilds, das
boot.wim
in Index 2 gespeichert ist, kann jetzt unterc:\mediarefresh\mounted
angezeigt werden.
Anwenden von Drittanbietertreibern auf WinPE
Installieren Sie Drittanbietertreiber, diec:\mediarefresh\drivers
Sie im Ordner gesammelt haben, unterc:\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
Anwenden von Wartungsupdates auf WinPE
Wenden Sie das neueste kumulative Update und seine Abhängigkeiten, die Sie in denc:\mediarefresh\packages
-Ordner heruntergeladen haben, auf WinPE anc:\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.Wenden Sie zuerst die Abhängigkeit des Wartungsstapelupdates an.
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
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.
Kopie aktualisiert
Setup.exe
Bevor Sie fortfahren, kopieren Sie die aktualisiertesetup.exe
von WinPE unterc:\mediarefresh\mounted\sources
nachc:\mediarefresh\out\sources
mithilfe von Robocopy.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
Nun können wir
setup.exe
vonc:\mediarefresh\mounted\sources
nachc:\mediarefresh\out\sources
mithilfe von Robocopy kopieren.robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe
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 unterc:\mediarefresh\mounted
. Wenn Sie die Bereitstellung nicht ausführen möchten, tritt ein Fehler auf.Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
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
Veröffentlichen
Boot.wim
inout
-OrdnerNun kopieren Sie die aktualisierte
boot.wim
vonc:\mediarefresh\wim
nachc:\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.
Bereitstellen des Betriebssystems install.wim
Der erste Schritt beim Aktualisieren der WinPE-Umgebung besteht darin, einen temporären Ordner
mounted
unterc:\mediarefresh
mithilfe des PowerShell-Befehls New-Item zu erstellen.MD c:\MediaRefresh\mounted
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
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"
Der Inhalt des Windows IoT Enterprise-Imagespeichers in install.wim unter Index 2 ist jetzt sichtbar unter
c:\mediarefresh\mounted
.
Installieren von Drittanbietertreibern
Installieren Sie Treiber von Drittanbietern, die Sie in demc:\mediarefresh\drivers
-Ordner gesammelt haben, in das Betriebssystem-Image unterc:\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.Hinzufügen von benutzerdefinierten Setupskripts
Erstellen Sie vor dem Hinzufügen von benutzerdefinierten Setupskripts zum Betriebssystemimage zuerst einen
scripts
-Ordner unterc:\mediarefresh\mounted\windows\setup\
Verwendung des PowerShell-Befehls New-Item.MD c:\mediarefresh\mounted\windows\setup\scripts
Kopieren Sie Skripts von
c:\mediarefresh\scripts
nachc:\mediarefresh\mounted\windows\setup\scripts
mithilfe von Robocopy.robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd
Anwenden von Wartungspaketen auf das Betriebssystemimage
Wenden Sie das neueste kumulative Update und seine Abhängigkeiten, die Sie in denc:\mediarefresh\packages
-Ordner heruntergeladen haben, auf WinPE anc:\mediarefresh\mounted
, indem Sie den PowerShell-Befehl Add-WindowsPackage verwenden.Wenden Sie zuerst die Abhängigkeit des Wartungsstapelupdates an.
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
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.
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 unterc:\mediarefresh\mounted
. Wenn Sie die Bereitstellung nicht ausführen möchten, tritt ein Fehler auf.Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
Temporärer Ordner löschen
mounted
Nach erfolgreicher Bereitstellung von boot.wim können wir den temporären Ordnerc:\mediarefresh\mounted
mithilfe des PowerShell-Befehls Remove-Item entfernen.RD c:\mediarefresh\mounted
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 denc:\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
Schließen Sie das Flashlaufwerk mit Ihrem Zielgerät an.
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.
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