IoT Enterprise インストール メディアを更新する
この記事では、メディア更新環境を設定し、WinPE 環境とメイン オペレーティング システムの両方を更新するために必要なすべての前提条件を収集して、ドライバーをインストールします
メディア サービス環境を準備する
管理者特権で PowerShell を開始します。
この PowerShell のインスタンスは、更新プログラムを適用するためにインストール メディアにサービスを提供するエンド ツー エンド プロセスに使用し、必要に応じて、Windows インストール メディアの一部ではない必要なドライバーを組み込みます- [スタート] を選択します
- 「PowerShell」と入力します
- Windows PowerShell を右クリックします
- [管理者として実行] を選択します
メディア サービス中にファイルを格納するフォルダーを作成する
PowerShell コマンド New_Item を使用して、メディア サービス中に必要なファイルを格納する次のフォルダーをテクニシャン PC 上で作成します。c:\MediaRefresh: メディア サービス中にファイルを格納するための親フォルダー。
c:\MediaRefresh\Out: サービス中に更新された元のメディアのコピー。
c:\MediaRefresh\Packages\LCU: 最新の累積的な更新プログラム c:\MediaRefresh\Packages\SSU: 必要に応じたサービス スタック更新プログラム
c:\MediaRefresh\Drivers: サード パーティ製ドライバー。
c:\MediaRefresh\Scripts: カスタム インストール スクリプト。 c:\MediaRefresh\WIM: boot.wim と 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
元のメディアからファイルをコピーする
元のインストール メディアからc:\MediaRefresh\Out
にすべてのファイルをコピーします。物理メディアがある場合は手順
b.
に進みます。それ以外の場合は、最初に Mount-DiskImage を使用して Windows IoT Enterprise インストール ISO をマウントし、Get-Volume を使用してマウントされたドライブ文字を表示する必要があります。Mount-DiskImage -ImagePath <ISO Path> | Get-Volume
<ISO Path>
は、ISO に対する完全修飾パスです次の手順で使用する必要があるため、DriveLetter をメモします。
Robocopy を使用して
<DriveLetter>
でここに示されている元のインストール メディアからc:\MediaRefresh\Out
フォルダーにファイルをコピーします。robocopy <DriveLetter>:\ c:\MediaRefresh\Out /Copy:DT /e
<DriveLetter>
は、マウントされた ISO ファイルに関連付けられているドライブ文字ですRobocopy を使用して、boot.wim と install.wim を
c:\MediaRefresh\Out\Sources
からc:\MediaRefresh\WIM
フォルダー (WIM ファイルを更新するための作業フォルダー) に移動します。robocopy c:\mediarefresh\out\sources c:\MediaRefresh\WIM *.wim /Mov
前のコマンドの ISO をマウントしていない場合は、次の手順に進みます。それ以外の場合は、最初に Dismount-Diskimage を使用して Windows IoT Enterprise インストール ISO のマウントを解除する必要があります
Dismount-DiskImage -ImagePath <ISO Path>
<ISO Path>
は、ISO ファイルに対する完全修飾パスです。
サービス パッケージを収集する
最新の累積的な Microsoft サービス更新プログラム (MSU) ファイルを
c:\MediaRefresh\Packages\LCU
フォルダーにダウンロードします。サービス スタック更新プログラム (MSU) の依存関係が必要な場合は、
c:\MediaRefresh\Packages\SSU
フォルダーにダウンロードします。 次の表は、特定のバージョンの Windows IoT Enterprise の更新プログラムを見つけるのに役立ちます。リリース バージョン 更新履歴 更新プログラム カタログ Windows 11 IoT Enterprise LTSC 2024 [24H2] 26100 更新履歴を表示する x64 更新プログラムを表示する
ARM64 更新プログラムを表示するWindows 10 IoT Enterprise LTSC 2021 19044 更新履歴を表示する x64 更新プログラムを表示する
ARM64 更新プログラムを表示するWindows 10 IoT Enterprise LTSC 2019 17763 更新履歴を表示する x64 更新プログラムを表示する
ARM64 更新プログラムを表示するWindows 10 IoT Enterprise LTSC 2016 14393 更新履歴を表示する x64 更新プログラムを表示する
x86 更新プログラムを表示するWindows 10 IoT Enterprise LTSC 2015 10240 更新履歴を表示する x64 更新プログラムを表示する
x86 更新プログラムを表示する[省略可能] サード パーティ製ドライバーを収集する
デバイスに必要なサード パーティ製ドライバーを非圧縮形式でc:/MediaRefresh/drivers
フォルダーのルートまたはc:/MediaRefresh/drivers
へのサブフォルダーとして配置します。[省略可能] 構成スクリプトを収集する
Windows セットアップ プロセスの実行中または後に実行されるSetupcomplete.cmd
およびErrorHandler.cmd
カスタム スクリプトをc:\MediaRefresh\Scripts
フォルダーに配置します。詳細については、「カスタム スクリプトを Windows セットアップに追加する」を参照してください
Windows プレインストール環境 (WinPE) を更新する
Windows プレインストール環境 (WinPE) は、元のインストール メディアの \sources
フォルダーの下にある boot.wim
の中に含まれています。 このセクションでは、メディア サービス環境を使用して、最新の累積的なサービス更新プログラムで boot.wim
を更新し、必要に応じて WinPE 環境にサード パーティ製ドライバーを組み込むプロセスについて説明します。
WinPE boot.wim をマウントする
WinPE 環境を更新する最初の手順は、PowerShell コマンド New-Item を使用して、
c:\mediarefresh
の下にmounted
という名前で一時フォルダーを作成することですMD c:\MediaRefresh\mounted
boot.wim
を更新する前に、ファイル属性が ReadOnly に設定されていないことを確認する必要があります。 PowerShell コマンド Set-ItemProperty を使用して、ReadOnly 属性を削除します。Set-ItemProperty -Path "c:\mediarefresh\wim\boot.wim" -Name IsReadOnly -Value $false
これで、PowerShell コマンド Mount-WindowsImage を使用して、インデックス 2 の
boot.wim
に格納されている WinPE イメージをマウントできるようになりましたMount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
インデックス 2 の
boot.wim
に格納されている WinPE イメージの内容を、c:\mediarefresh\mounted
で表示できるようになりました。
WinPE にサード パーティ製ドライバーを適用する
PowerShell コマンド Add-WindowsDriver を使用して、c:\mediarefresh\drivers
フォルダーに収集したサード パーティ製ドライバーをc:\mediarefresh\mounted
の WinPE にインストールします。Note
テスト用には、
-ForceUnsigned
を使用して署名されていないドライバーを追加して、ドライバーにはデジタル署名が必要になるという要件を上書きできます。 ドライバーの署名要件の詳細については、デバイス ドライバーと展開の概要に関するページを参照してください。Add-WindowsDriver -Path "c:\mediarefresh\Mounted" -Driver "c:\mediarefresh\drivers" -Recurse
WinPE にサービス更新プログラムを適用する
PowerShell コマンド Add-WindowsPackage を使用して、c:\mediarefresh\packages
フォルダーにダウンロードした最新の累積的な更新プログラムとその依存関係をc:\mediarefresh\mounted
の WinPE に適用します。 このプロセスの完了には数分かかる場合がありますが、これにより、Windows イメージに最新のサービス更新プログラムが適用されます。まず、サービス スタック更新プログラムの依存関係を適用します。
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
ここで最新の累積的な更新プログラムを適用します。
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU"
ヒント
エラー 0x800f0823 が発生した場合、サービス更新プログラムには、最初に適用する必要がある依存関係がある可能性があります。 依存関係を既にダウンロードしている場合は、上記のコマンドをもう一度実行してみてください。 これで問題が解決しない場合は、更新プログラムの追加の前提条件をダウンロードする必要がある可能性があります。
- c:\mediarefresh\packages にある更新プログラムのファイル名に記載されている KB####### を書き留めます。
- support.microsoft.com で KB####### を検索します
- 一致する最初のトピックを開き、"前提条件" という用語を検索します。
- 記載されている前提条件をダウンロードし、上記のコマンドをもう一度実行します。 前提条件を最初に適用するには、コマンドを 2 回実行する必要がある場合があります。
- エラーが解決されたら、次の手順に進みます。
更新された
Setup.exe
をコピーする
続行する前に、Robocopy を使用して更新されたsetup.exe
をc:\mediarefresh\mounted\sources
の WinPE からc:\mediarefresh\out\sources
にコピーします。最初に、PowerShell コマンド Set-ItemProperty を使用して
c:\mediarefresh\mounted\sources\setup.exe
で ReadOnly 属性を削除する必要があります。Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false
これで、Robocopy を使用して
setup.exe
をc:\mediarefresh\mounted\sources
からc:\mediarefresh\out\sources
にコピーできます。robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe
マウントを解除して WinPE への変更を保存する
サービス プロセスを完了するには、PowerShell コマンド Dismount-WindowsImage を使用して変更を保存します。
重要
Dismount-WindowsImage
コマンドを実行する前に、c:\mediarefresh\mounted
の下にコンテンツを表示しているエクスプローラー ビューまたはコマンド ウィンドウがないことを確認します。 これを行わないと、マウントを解除しようとするとエラーが発生します。Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
一時フォルダーを削除する
boot.wim のマウントが正常に解除されたら、PowerShell コマンド Remove-Item を使用して一時フォルダー
c:\mediarefresh\mounted
を削除できるようになりますRD c:\MediaRefresh\mounted
out
フォルダーにBoot.wim
を公開する次に、Robocopy を使用して更新された
boot.wim
をc:\mediarefresh\wim
からc:\mediarefresh\out\sources
にコピーします。robocopy c:\mediarefresh\wim c:\mediarefresh\out\sources boot.wim
c:\mediarefresh\out\sources\
の下に boot.wim
および setup.exe
として格納されている Windows プレインストール環境 (WinPE) が完全に更新されます。
Windows IoT Enterprise を更新する
Windows IoT Enterprise イメージは、\sources
フォルダーの下にある元のインストール メディアの install.wim
に含まれています。 「メディア サービス環境の準備」セクションで、install.wim
を作業フォルダーに移動しました。 このセクションでは、メディア サービス環境を使用して、最新の累積的なサービス更新プログラムで install.wim
を更新し、ターゲット デバイスで必要とされる場合にサード パーティ製ドライバーを組み込むプロセスについて説明します。 更新が完了したら、FAT32 形式のフラッシュ ドライブにコピーできるように、install.wim
をより小さな *.swm
ファイルに分割します。
OS install.wim をマウントする
WinPE 環境を更新する最初の手順は、PowerShell コマンド New-Item を使用して、
c:\mediarefresh
の下にmounted
という名前で一時フォルダーを作成することです。MD c:\MediaRefresh\mounted
install.wim を更新する前に、ファイル属性が ReadOnly に設定されていないことを確認する必要があります。 PowerShell コマンド Set-ItemProperty を使用して、ReadOnly 属性を削除します。
Set-ItemProperty -Path "c:\mediarefresh\wim\install.wim" -Name IsReadOnly -Value $false
PowerShell コマンド Mount-WindowsImage を使用して、インデックス 2 の install.wim に格納されている Windows IoT Enterprise イメージをマウントできるようになりました
Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
インデックス 2 の install.wim に格納されている Windows IoT Enterprise イメージのコンテンツは、
c:\mediarefresh\mounted
で表示できるようになりました。
サード パーティ製ドライバーをインストールする
PowerShell コマンド Add-WindowsDriver を使用して、c:\mediarefresh\drivers
フォルダーに収集したサード パーティ製ドライバーをc:\mediarefresh\mounted
の OS イメージにインストールします。-recurse
パラメーターを使用すると、サブフォルダーの処理が可能になります。Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse
Note
テスト用には、
-ForceUnsigned
を使用して署名されていないドライバーを追加して、ドライバーにはデジタル署名が必要になるという要件を上書きできます。 ドライバーの署名要件の詳細については、デバイス ドライバーと展開の概要に関するページを参照してください。カスタム セットアップ スクリプトを追加する
OS イメージにカスタム セットアップ スクリプトを追加する前に、まず PowerShell コマンド New-Item を使用して
c:\mediarefresh\mounted\windows\setup\
の下にscripts
フォルダーを作成します。MD c:\mediarefresh\mounted\windows\setup\scripts
Robocopy を使用してスクリプトを
c:\mediarefresh\scripts
からc:\mediarefresh\mounted\windows\setup\scripts
にコピーします。robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd
サービス パッケージを OS イメージに適用する
PowerShell コマンド Add-WindowsPackage を使用して、c:\mediarefresh\packages
フォルダーにダウンロードした最新の累積的な更新プログラムとその依存関係をc:\mediarefresh\mounted
の WinPE に適用します。まず、サービス スタック更新プログラムの依存関係を適用します。
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
ここで最新の累積的な更新プログラムを適用します。
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU"
ヒント
エラー 0x800f0823 が発生した場合、サービス更新プログラムには、最初に適用する必要がある依存関係がある可能性があります。 依存関係を既にダウンロードしている場合は、上記のコマンドをもう一度実行してみてください。 これで問題が解決しない場合は、更新プログラムの追加の前提条件をダウンロードする必要がある可能性があります。
- c:\mediarefresh\packages にある更新プログラムのファイル名に記載されている KB####### を書き留めます。
- support.microsoft.com で KB####### を検索します
- 一致する最初のトピックを開き、"前提条件" という用語を検索します。
- 記載されている前提条件をダウンロードし、上記のコマンドをもう一度実行します。 前提条件を最初に適用するには、コマンドを 2 回実行する必要がある場合があります。
- エラーが解決されたら、次の手順に進みます。
更新された install.wim を保存してマウントを解除する
サービス プロセスを完了するには、PowerShell コマンド Dismount-WindowsImage を使用して変更を保存します。重要
Dismount-WindowsImage
コマンドを実行する前に、c:\mediarefresh\mounted
の下にコンテンツを表示しているエクスプローラー ビューまたはコマンド ウィンドウがないことを確認します。 これを行わないと、マウントを解除しようとするとエラーが発生します。Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
一時フォルダー
mounted
を削除する
boot.wim のマウントが正常に解除されたら、PowerShell コマンド Remove-Item を使用して一時フォルダーc:\mediarefresh\mounted
を削除できるようになりますRD c:\mediarefresh\mounted
FAT32 ファイル システムをサポートする WIM を分割する
新しい install.wim が FAT32 形式のフラッシュ メディア (最大ファイル サイズが 4 GB) に収まるようにするには、PowerShell コマンド Split-WindowsImage を使用して、Windows イメージ (install.wim) ファイルを一連の小さい (.swm) ファイル (最大サイズ 4000 MB) に分割します。 その結果生成される*.swm
ファイルはc:\mediarefresh\out\sources
フォルダーに書き込まれます。Split-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -SplitImagePath "c:\mediarefresh\out\sources\install.swm" -FileSize 4000 -CheckIntegrity
OS のインストール イメージ (最初は install.wim
のように保存される) は、c:\mediarefresh\out\sources\
の下に install.swm
と install2.swm
として保存され、元の install.wim
であるかのように使用されます。
更新されたメディアをフラッシュ ドライブにコピーする
起動可能なフラッシュ ドライブを作成していない場合は、「フラッシュ ドライブから Windows をインストールする」の手順に従って作成してから続行してください。
更新されたインストール メディアを作成する最後の手順は、Robocopy を使用して起動可能なフラッシュ ドライブに c:\mediarefresh\out
の内容をコピーすることです。
robocopy c:\mediarefresh\out <DriveLetter>:\ /e
<DriveLetter>
はフラッシュ ドライブに関連付けられているドライブ文字です
新しいデバイスに Windows をインストールする
フラッシュ ドライブをターゲット デバイスに接続します。
デバイスの電源を入れ、Esc/F10/F12キーなど、コンピューターの起動デバイス選択メニューを開くキーを押します。 フラッシュドライブからデバイスを起動するオプションを選択します。
Windows セットアップが開始されます。 指示に従って Windows をインストールします
ヒント
このプロセスがデバイスで動作しない場合は、デバイスの製造元の指示に従って、フラッシュ ドライブから起動するように構成する必要があります。
セットアップの初期フェーズが完了し、デバイスが再起動すると、セットアップが再び最初から開始される場合があります。 セットアップが再び開始された場合は、セットアップを取り消し、コンピューターをシャットダウンしてからフラッシュ ドライブを取り出し、デバイスの電源をオンにしてセットアップの次のフェーズに進みます。
ヒント
何らかの理由でセットアップ プロセス中にエラーが発生した場合は、トラブルシューティングのガイダンスに関する次の記事を参照してください。
完全なスクリプト
このセクションには、メディア サービスの各手順を自動的に連続して実行する完全なスクリプトが含まれています。 このスクリプトを使用する前に、この記事の「メディア サービス環境を準備する」セクションを完了する必要があります。 準備ができたら、次の PowerShell スクリプトを 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