LoginSignup
3
2
Qiita×Findy記事投稿キャンペーン 「自分のエンジニアとしてのキャリアを振り返ろう!」

Windows 10 / 11 USBドライブを使用したWindowsイメージ展開方法

Last updated at Posted at 2024-02-16

はじめに

キッティング自動化関連の記事は数多く出ておりますが
事細か、且つひとまとめに情報が載っている記事があまりない印象でしたので
調べてみたうえで参考にした内容や自力で検証してみた内容も含め
記事にしてみました。

※今回Windows11環境で実施しますが、10も基本的にやっている内容は同じです。


<大変参考になった資料(ディレクトリ構成はこちらの内容に倣って作成します)>

対応内容の流れ

簡易的にまとめると以下のような流れとなります。

1.diskpartを使用したUSBメモリのセッティング
↓
2.WinPEイメージング作成(WinPEを起動可能状態にする)
↓
3.Windowsイメージを参照可能状態にする。更新プログラムを追加する
↓
4.応答ファイルの作成
↓
5.マスターイメージの作成
↓
6.(他のPCへ)イメージを展開する

用意するもの・事前に対応すること

1.PC(作業用、マスターイメージ作成用[参照用])
今回は作業用、参照用ともに以下のスペック内容のPCを使用しました。

<スペック>
・OS:Windows11 Pro x64
・CPU:Core i5-1235U 12th Gen
・メモリ:DDR4 16GB
・ストレージ:256GB(SSD)

2.USBメモリ(容量:最低32GB~)
今回は1つのUSBメモリを2つのパーティション分けて使用します。


3.事前対応
あらかじめ下記の通りにディレクトリを作成しておいてください。

REM 今回はCドライブのボリュームを縮小して、Dドライブを作業用ディレクトリとして用意してます。
D:​
└─deployment_work​
    └─22H2​
        ├─AnswerFiles:応答ファイル保管先(Audit, OOBE)​
        ├─images:WinPE/Win10Pro/イメージのエクスポート先​
        └─mount​
            ├─windows:更新プログラム追加先​
            └─winpe:WinPEのイメージングファイル作成先

ここまで準備ができたらイメージング作業に取り組みます。

手順

もろもろの手順を記載していきます。

1. 各ツール・ファイル類のインストール

Windows ADK
Windows PEアドオン
こちらからインストールできるため、OSバージョンに合致するものをDLする。

WindowsADK

image.png


インストールを行う機能の選択画面では
こだわりがなければデフォルトのままインストールに進んでください。
Deployment Toolsは必要です。

image.png

Windows PEアドオン

→ インストール対象は1つのみなので、このままインストールへ
image.png


イメージ展開用のサンプルスクリプト

こちら からインストールできる。
「サンプル スクリプトの ZIP 形式」とリンクが張られている。
(おそらくWin10と11共通かと思います。)

image.png


Windows10/11のisoファイル

→やり方はWeb検索すればゴロゴロ転がってるので割愛。

2. USBメモリのセッティング

セッティング前の確認

diskpartを起動し、[list disk]を実行しディスク内容を確認。

sample1.png

32GBのメモリを使用することから、今回だと「ディスク1」がUSBメモリであるとわかる。

判別が難しい場合は、GUI上(ディスクの管理)でディスクNo.を確認することができる。

image.png

注意
USBメモリのテーブル形式(GPT欄)は「MBR」にしてください。
もしUSBメモリのディスクのGPT欄にアスタリスクがついていた場合

convert mbr

を実行し、MBRフォーマットに変換してください。
→古いPCなどマザーボードのブート規格や、
パーティションを4つ以上作成したりすることもないのでMBRにしています。
参考サイト:MBR と GPTの違い、相互変換及び初期化方法‐どっちがよい

WindowsPE Partitionの作成

diskpartを起動し、以下のコマンドを実行します。

REM USBメモリを選択する。
select disk 1
REM 2GBの領域を確保します。
create partition primary size=2000
REM ファイルシステムとラベルを設定。WinPEはFAT32形式
format quick fs=fat32 label="WinPE"
REM ドライブレターを指定する。(なんでもいいですが今回はP)
assign letter=P
REM パーティションを起動可能な状態にする
active

USB-B Partitionの作成

以下のコマンドを実行します。

REM 残りの領域すべてを確保する
create partition primary
REM イメージング用はNTFS形式にする
format quick fs=ntfs label="USB-B"
REM ドライブレターを指定する。(こちらはOにします)
assign letter=O
REM パーティショニングが終わったらexitする
exit

正常に処理が終了すると、以下のような構成になっているはずです。
diskpartで「list vol」を実行して確かめます。
赤枠の通り、サイズ・ラベル・レター・Fs・Infoが問題ないことを確認してください。
sample1.png

USB-Bにサンプルファイルをコピーする

各ツール・ファイル類のインストール > ③イメージ展開用のサンプルスクリプトにて
DLしたzipファイルを解凍し、USB-B(O:)にすべてコピーします。

sample2.png

USBの準備としてはこれで以上となります。

3. WinPEの起動準備

WinPEのイメージングファイルを作成する

「展開およびイメージングツール環境」 というアプリケーションがインストールされているため
「管理者権限」で実行します。(Windows ADKインストール時に導入済)
→以降、アプリケーションはすべて 「管理者権限」 で実行する必要があります。

注意
管理者権限で開かないと、権限不足によるエラーが発生しますのでご注意ください。


以下のコマンドを実行します。
→ ディレクトリ名:winpe_amd64は自動生成されます。
(ディレクトリが生成前に存在しているとエラーが出ます。)

copype amd64 D:\deployment_work\22H2\winpe_amd64

Successと表示されると、無事処理が完了しております。

sample3.png

WinPEをマウントして、使用できる状態にする

以下のコマンドを実行します。

Dism /mount-image /imagefile:D:\deployment_work\22H2\winpe_amd64\media\sources\boot.wim /index:1 /mountdir:D:\deployment_work\22H2\mount\winpe

「操作は正常に完了しました」と出たらマウント成功​です。
image.png

WinPEに各種コンポーネントを追加

キーボードの規格がUS一択だったり、言語packをUS縛りにしている場合を除き
各種コンポーネントを追加する必要があります。

以下のコマンドを実行します。
(今回はすべて日本語に変換します)

REM 日本語ランゲージパックの追加
Dism /image:D:\deployment_work\22H2\mount\winpe /add-package /packagepath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ja-jp\lp.cab"

REM フォントパックも追加
Dism /image:D:\deployment_work\22H2\mount\winpe /add-package /packagepath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-FontSupport-JA-JP.cab"

REM インプットロケール・キーボードレイアウト変更
Dism /image:D:\deployment_work\22H2\mount\winpe /Set-Inputlocale:"0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}"

REM UI言語のデフォルトを変更
Dism /image:D:\deployment_work\22H2\mount\winpe /Set-UILang:"ja-jp"

REM タイムゾーンを東京にします
Dism /image:D:\deployment_work\22H2\mount\winpe /Set-Timezone:"Tokyo Standard Time"

REM キーボードドライバを106/109に変更。
Dism /image:D:\deployment_work\22H2\mount\winpe /Set-Layereddriver:6

WinPE起動時に実行されるコマンド内容を変更

USBブートでWinPEを起動させると
内部でstartnet.cmdというファイルを実行させる処理が走ります。
この部分を変更させます。

「展開およびイメージングツール環境」から以下のコマンドを実行します。

notepad D:\deployment_work\22H2\mount\winpe\Windows\System32\startnet.cmd

startnet.cmdが開きますので、もろもろ処理をここで書き込みます。
他の記事を見ると電源設定を高パフォーマンスに変更し、処理を高速化させていますので
「wpeinit」の前に下記のコードを追加して上書き保存します。

powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

こんな感じ
image.png

WinPEイメージ最適化~マウント解除

イメージ内の不要なコンポーネントやファイル類を削除し
イメージファイルのサイズを縮小して処理を円滑にさせるおまじないをしていきます。
(イメージの最適化 といいます。)

以下のコマンドを実行していきます。

dism /image:D:\deployment_work\22H2\mount\winpe /cleanup-image /startcomponentcleanup

「操作は正常に完了しました」とコンソール上に出力されたらOKです。
image.png

WinPE内の設定はこれで以上となるので
書き換えられないようにマウントを解除していきます。
以下のコマンドを実行していきます。

dism /unmount-image /mountdir:D:\deployment_work\22H2\mount\winpe /commit

注意
マウント解除(アンマウント)をする際、アンマウント対象のディレクトリが
・エクスプローラーで開かれている
・メモ帳など他アプリで開かれている
・cmd, “展開およびイメージングツール環境”にて、カレントディレクトリが
アンマウント対象になっている
etc...

上記の状態でマウント解除するとエラーが出ます。

もしエラーが出たら /commit/discardに変えて再度実行してください。

「操作は正常に完了しました」とコンソール上に出力されたらOKです。
image.png

WinPEドライブの作成

USBメモリ内で作成したWinPE起動用パーティションに
WinPEイメージをインストールしていきます。

diskpartを起動し「list vol」でWinPEのドライブレターを確認していきましょう。
(レターは「P」になっています。)

確認後はexitでdiskpartを抜けます。

sample5.png

「展開およびイメージングツール」を管理者権限で開き、
以下のコマンドを実行していきます。

makewinpemedia /UFD D:\deployment_work\22H2\winpe_amd64 <WinPEドライブレター>

「WARNING, ALL DATA ON DISK DRIVE P: WILL BE LOST!」と出ますが
[Y]で操作を続行させます。
「Success」とコンソールに表示されたら完了です。

image.png

作成後、USBメモリを参照用PCに挿して、USBブートを行い
WinPEの実行画面が表示されるかを確認します。
→startnet.cmdにて編集したコマンドが実行されていれば、OKです。

image.png

無事、WinPEが起動できましたらイメージをエクスポートして
デフォルトのイメージを書き換えます。

以下のコマンドを実行し、イメージをエクスポートします。

dism /export-image /sourceimagefile:D:\deployment_work\22H2\winpe_amd64\media\sources\boot.wim /sourceindex:1 /DestinationImageFile:D:\deployment_work\22H2\images\boot2.wim

オリジナルのWinPEイメージを削除し、エクスポートしたイメージを置き換えます。

Del D:\deployment_work\22H2\winpe_amd64\media\sources\boot.wim
copy D:\deployment_work\22H2\images\boot2.wim D:\deployment_work\22H2\winpe_amd64\media\sources\boot.wim

4. Windowsイメージのカスタマイズ

WinPEと同様にWindowsイメージをisoファイルを使用してカスタマイズしていきます。

Windowsイメージのマウント

あらかじめDLしたWindowsファイル(isoファイル)を作業用PC上でマウントします。
「Win11_22H2_Japanese_x64v2.iso」というファイルを今回DLしていますので
ファイルを右クリック→「マウント」を選択します。
image.png

マウントが実行されると自動的にレターが割り振られます。
(DVDドライブとして認識。本環境ではレターは「K」で割り振られています。)

image.png

マウント後、「展開とイメージングツール環境」を管理者権限として開き
下記のコマンドを実行し、「install.wim」という名称としてコピーしていきます。

copy K:\sources\install.wim D:\deployment_work\22H2\images\install.wim

コピーしたinstall.wimには複数のエディションが含まれています。

→手動でwindowsをインストールしていればご存じかと思いますが、
手動キッティングでwindowsをインストールする際、
複数のエディションの選択画面が表示されるかと思います。

参考↓
image.png

これらはDismコマンドでも確認することができ、下記のコマンドを実行することで
エディションとインデックスを確認することができます。

dism /get-imageinfo /imagefile:D:\deployment_work\22H2\images\install.wim

image.png

→Windows Proの場合、インデックス番号は3になっているかと思います。

確認したインデックス番号を使用して、Windowsのイメージを取り出していきます。
下記のコマンドを実行していきます。(今回はPro Editionを適用します。)

dism /Export-Image /SourceimageFile:D:\deployment_work\22H2\images\install.wim /SourceIndex:3 /DestinationImageFile:D:\deployment_work\22H2\images\basicimage.wim

取り出したイメージ(basicimage.wim)を作業用ディレクトリにマウントしていきます。

注意
※マウント先のディレクトリは必ず空であることを確認すること

Dism /Mount-Wim /WimFile:D:\deployment_work\22H2\images\basicimage.wim /index:1 /MountDir:D:\deployment_work\22H2\mount\windows

Windowsイメージに更新プログラムを追加

デフォルトではイメージ展開後にWindowsUpdateを実行すると
大幅な時間を要することもあるので
容量に余裕があればあらかじめ更新プログラムをイメージに追加していきます。

注意
更新プログラムの内容によっては不具合が生じることもあります。
事前に調査し、不具合の恐れがないかを確認してください。


Windows Updateの更新履歴を確認し、最新バージョンを確認していきます。
OSビルド番号ではなく、パッチの番号(KBxxxxxxx)を確認してください。
Windows10の更新履歴はこちら
Windows11の更新履歴はこちら


番号を確認したら、下記のサイトから更新プログラムをDLしていきます。
保存先は特に指定ないので、Cドライブでもよいです。
https://www.catalog.update.microsoft.com/home.aspx


今回は一例としてWindows11の「KB5031455」をDLしていきます。
上記のリンクをクリックすると下記のような画面が表示されるので、
赤枠内のテキストボックスに番号を入力し、「検索」ボタンを押下します。

image.png

OSのベースシステムバージョンごとにDL先が異なるため、
展開先の環境と同一のものをDLしていきます。
右側にある「ダウンロード」ボタンを押下します。

image.png

すると別ウィンドウでダウンロードを行う画面が出てくるので、
「.msu」と記載されているリンクを押下します。
ダウンロード先については指定ありませんので、適当なところに設置してください。

image.png

DLが完了したら、Windowsイメージにパッケージを追加していきます。
以下のコマンドを実行します。

dism /add-package /image:D:\deployment_work\22H2\mount\windows /packagepath: <.msuファイルのファイルパス>

Windowsイメージ最適化

WinPE同様、イメージファイルを縮小していきます。

アップデートファイルを展開するために使う一時ファイル(Tempファイル)を作成します。
すでにTempファイルが存在している可能性もあるため、その際はTempファイルを空にしてください。

REM Tempファイルがなければ実行してください。
md C:\Temp

「展開とイメージングツール」を管理者権限で開き、以下のコマンドを実行していきます。

dism /cleanup-image /image=D:\deployment_work\22H2\mount\windows /startcomponentcleanup /scratchdir:C:\Temp

完了後、
以下のコマンドを実行することで更新プログラムがイメージに含まれているか確認できます。

dism /image:D:\deployment_work\22H2\mount\windows /Get-Packages

以下のように表示されていれば問題ないかと思います。(下記は一例)

...
パッケージ ID : Package_for_ServicingStack_2495~31bf3856ad364e35~amd64~~22621.2495.1.0
状態 : インストール済み
リリースの種類 : Update
インストール時刻 : 2023/11/06 3:34
...

この時点で作業中断する際は、アンマウントしていただければと思います。(任意)

dism /unmount-image /mountdir:D:\deployment_work\22H2\mount\windows /commit

5.応答ファイルの作成

応答ファイルってなに???

Microsoft公式には以下のように記載されております。

応答ファイルとは、Windows セットアップ中に使用する設定の定義と値を格納する XML ベースのファイルのことです。 応答ファイルでは、さまざまなセットアップ オプションを指定します。
応答ファイルの概要 - Microsoft

簡単に言うと

・Windowsセットアップ時に聞かれたアカウント作成や諸々の同意ページを
 応答ファイル上で定義する
・定義の内容によるけど、クリックやキー入力を省くことができる

などが応答ファイル作成・展開時にできるということです。

構成ファイル作成

使用するツールは
「Windows システムイメージマネージャー(Windows SIM)」 となります。

これを管理者権限で起動します。

ファイル → [Windowsイメージの選択」から、
作業用ディレクトリの「images」内にある「install.wim」を開き、
エディションを選択していきます。

image.png

image.png

install.wimを開くとイメージファイル内のイメージの選択画面が表示されます。

image.png

「カタログファイルが見つからないので新規で作成する?」
的なダイアログが出現します。

カタログファイル(.clg)はWindows SIM内で使用される構成ファイルであり
この後設定するコンポーネントの値変更などの情報が
バイナリファイルとして保持されるファイルです。

Windows イメージ ファイルとカタログ ファイルの概要 - Microsoft

作成しないと前に進めないので、おとなしく「はい」を選択しましょう。

image.png

「はい」を選択するとカタログファイルが新規作成され、
Windowsイメージのマウントを自動で行ってくれます。

image.png

次に応答ファイルを新規作成します。
ファイル → 「新しい応答ファイル」を選択します。

image.png

応答ファイル内は以下のような構成となっております。

Untitled:応答ファイルの名称(デフォではUntitled)
    ├ Components:ここで諸々構成して、Windows無人セットアップを実行します。
    │   └ 1 windows PE
    │   └ 2 offlineServicing
    │   └ 3 generalize
    │   └ 4 specialize
    │   └ 5 auditSystem
    │   └ 6 auditUser
    │   └ 7 oobeSystem
    └ Packages

それぞれの応答ファイルに構成パスを追加していきます。
下記キャプチャの赤枠内にある「Components」を展開すると、各ファイルが出現します。

image.png

追加するコンポーネント一覧と追加先の構成パスは以下の通りです。
各コンポーネントを右クリック→追加先を選択すると、応答ファイルに追加されます。

“amd64_Microsoft-Windows-International-Core-WinPE​_neutral”​
→”Windows PE”に追加​

“amd64_Microsoft-Windows-PnpSysprep​_neutral”​
→ ”Generalize”に追加​

“amd64_Microsoft-Windows-Shell-Setup​_neutral”​
→ “Specialize”, “oobeSystem”に追加​

“amd64_Microsoft-Windows-International-Core​_neutral”​
→ “oobeSystem”に追加​

“amd64_Microsoft-Windows-Deployment​_neutral”​
→ “oobeSystem”に追加

追加後の応答ファイルは以下の通りになっているかと思います。

image.png

また
・2 offlineServicing
・5 auditSystem
・6 auditUser
これらは設定いたしません。

6.各構成パス・コンポーネントの設定

設定内容を各コンポーネントに記載します。
(本設定はあくまで一例であるため、適宜設定内容を変えていただければと思います。)

windowsPE - amd64_Microsoft-Windows-International-Core-WinPE​_neutral

・InputLocale:MS-IMEを使用します

0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}

・LeyeredDriver:106/109キーボードを使用します

6

・SystemLocale, UILanguage, UserLocale, ​SetupUILanguage - UILanguage​

ja-JP

・UILanguageFallback

en-US

generalize - amd64_Microsoft-Windows-PnpSysprep​_neutral

・DoNotCleanUpNonPresentDevices

true

・PersistAllDeviceInstalls

true

Specialize - amd64_Microsoft-Windows-Shell-Setup​_neutral

・CopyProfile

true

・ComputerName:アスタリスクにするとコンピュータ名を自動生成してくれます。

*

・TimeZone

Tokyo Standard Time

・ProductKey

<Windowsのボリュームライセンスのプロダクトキーを入力してください>

oobeSystem - amd64_Microsoft-Windows-International-Core​_neutral

・InputLocale:MS-IMEを使用します。

0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}

・SystemLocale, UILanguage, UserLocale​

ja-JP

・UILanguageFallback

en-US

oobeSystem - amd64_Microsoft-Windows-Shell-Setup​_neutral

・TimeZone

Tokyo Standard Time

(オプション) 
イメージ展開後にコマンドやスクリプトを実行する際は
「FirstLogonCommands」を設定します。

image.png

1.「FirstLogonCommands」を右クリックし、「新しい SynchronousCommand の挿入」を選択
image.png


2.SynchronousCommand - CommandLine:流すコマンドやバッチファイルなどを入力

3.SynchronousCommand - Order:実行する順番を入力します。初期値は「1」です

image.png

oobeSystem - amd64_Microsoft-Windows-Shell-Setup​_neutral - OOBE

・HideEULAPage:Microsoft ソフトウェアライセンス条項ページを非表示

true

・ProtectYourPC:PCの保護は無効にするため、3を入力

3

・HideOnlineAccountScreen

true

・HideLocalAccountScreen

true

・HideWirelessSetupInOOBE

true

・NetworkLocation
・SkipMachineOOBE
・SkipUserOOBE

上記3点についてはWindows10以降では使用されなくなりました。
残っていても削除されていても無視されます。

・UserAccounts - LocalAccounts
「LocalAccounts」を右クリック→「新しいLocalAccountの挿入」を選択する

image.png

・LocalAccounts - LocalAccount - Group:管理者権限を付与するなら

Administrators

・LocalAccounts - LocalAccount - Name

ローカルアカウント名を入力

・LocalAccounts - LocalAccount - Password

パスワードを入力(プロパティ欄の「PlainText」がtrueになっているため、平文でOK)

image.png

oobeSystem - amd64_Microsoft-Windows-Deployment​_neutral

・Reseal

Audit

image.png


-------------------------------------------設定内容ここまで------------------------------------


一通り構成が完了したら、ツール → 「応答ファイルの検証」をクリックし、
エラーをチェックする。

設定は変更されていません。応答ファイルに保存されません。
Windowsイメージの設定~は使用されません

といった文面が出た場合、
該当の箇所(設定していない箇所)はクリック→Delで削除を繰り返し
再度「応答ファイルの検証」を実施する。

エラーがなければ(解消したら)、ファイル名を 「Unattend-Audit」 として​
「D:\deployment_work\22H2\AnswerFiles」 に保存する​。

その後
oobeSystem - amd64_Microsoft-Windows-Deployment​_neutralの「Reseal」欄を

OOBE

に変更し、新規ファイルの保存を実施しファイル名を 「Unattend-OOBE」 として
「D:\deployment_work\22H2\AnswerFiles」 に「名前を付けて保存」する​。

D:\deployment_work\22H2\AnswerFiles内には

・Unattend-Audit
・Unattend-OOBE

の2種のファイルが存在しているかと思います。

ここまで設定が完了すればWindows SIMの役割は終了です。
展開およびイメージングツールを管理者権限で開きます。

応答ファイル作成前にアンマウントしていれば、以下のコマンドを実行します。

Dism /Mount-Wim /WimFile:D:\deployment_work\22H2\images\basicimage.wim /Index:1 /MountDir:D:\deployment_work\22H2\mount\windows

Pantherディレクトリを作成します。

md D:\deployment_work\22H2\mount\windows\Windows\Panther

作成したPantherディレクトリにUnattend-Audit.xmlをコピーします。
これにより、参照用PCをUSBブートで起動した際に「監査モード」で起動することができ
特殊なコマンドなしでマスターイメージを作成することができます。

REM 名称はUnattend.xml
copy D:\deployment_work\22H2\AnswerFiles\Unattend-Audit.xml D:\deployment_work\22H2\mount\windows\Windows\Panther\Unattend.xml

次に以下のコマンドを実行し、ディレクトリを作成します。
そのあとUnattend-OOBE.xmlを作成したディレクトリ上にコピーします。

md D:\deployment_work\22H2\mount\windows\Windows\Recovery\OEM

copy D:\deployment_work\22H2\AnswerFiles\Unattend-OOBE.xml D:\deployment_work\22H2\mount\windows\Windows\Recovery\OEM

\mount\windows\Users配下にはpublicディレクトリがあるので
各ローカルユーザーが使用できるようファイルを設置したい場合は適宜セットアップしてください。

7.Windowsイメージのエクスポート

諸々設定を詰め込んだWindowsイメージは容量が膨大になっているので、
これまでと同様にアンマウント前に最適化をしていきます。

以下のコマンドを実行します。

dism /Image:D:\deployment_work\22H2\mount\windows /Cleanup-Image /StartComponentCleanup

イメージをアンマウントします。
※イメージファイルがあるディレクトリが開かれていないか確認してください

REM やらかしたら「/commit」を「/discard」に変更して再度実施してください
dism /unmount-image /mountdir:D:\deployment_work\22H2\mount\windows /commit

イメージをエクスポートしていきます。
まず既存のinstall.wimを削除します。

del D:\deployment_work\22H2\images\install.wim

カスタムしたイメージである「basicimage.wim」から
「install.wim」という名称でエクスポートします。

dism /export-image /sourceimagefile:D:\deployment_work\22H2\images\basicimage.wim /sourceindex:1 /destinationimagefile:D:\deployment_work\22H2\images\install.wim

作業ディレクトリのimages内には最低限これらのファイルがあればOKです。

・basicimage.wim:カスタマイズしたイメージ
・boot2.wim:WindowsPEのカスタムイメージ
・install.wim:basicimage.wimからエクスポートしたイメージ

8.マスターイメージの構築

セッティングしたUSBメモリを作業用PCに挿し
「USB-B\Deployment\CreatePartitions-UEFI-FFU.txt」を編集します。

以下の内容に書き換えてください。(note欄を省き、ソースを見やすく修正しました。)
→イメージ展開にてApplyImage.bat実行時に呼び出されるスクリプトがこれになります。

select disk 0
clean
convert gpt
rem == 1. System partition =========================
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
rem == 2. Microsoft Reserved (MSR) partition =======
create partition msr size=16
rem == 3. Windows partition ========================
rem ==    a. Create the Windows partition ==========
create partition primary 
rem ==    b. Create space for the recovery tools ===
shrink minimum=500
rem ==    c. Prepare the Windows partition ========= 
format quick fs=ntfs label="Windows"
assign letter="W"
rem === 4. Recovery partition ======================
create partition primary
format quick fs=ntfs label="Recovery"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit

CreatePartitions-UEFI-FFU.txtの中身を修正をしたら
作業ディレクトリで作成した展開イメージ(Images\install.wim)
USB-B(USB-B\Images) にコピーします。
→ちょっと時間がかかります。

コピーが完了したら、USBを取り外します。


参照マシンをUSBブートで起動

参照マシンを立ち上げ、BIOSメニュー / ブート順序メニューからUSBブートします。

WinPEを起動したら、「diskpart」を起動し「list vol」で一覧表示します。
→USB-Bのドライブレターを確認してください。
確認ができたら、「exit」でdiskpartを抜けます。

以下のコマンドをWinPE環境で実行します。

REM ※USB-BのレターがF:と仮定します
cd /d F:\Deployment
ApplyImage.bat F:\Images\install.wim

ApplyImage.bat経由で処理が進みます。
途中コマンド入力を聞かれますので、適切な値を入力してください。

処理が正常終了しても、自動で再起動は行われません。
以下のようにコマンドプロンプト上に表示されたら、
「exit」を入力しUSBメモリを外してください。

REM * Configure the recovery partition with ApplyRecovery.bat​
REM * Reboot:​
REM   exit

再起動後、監査モードで参照マシンが立ち上がり
Administratorユーザーにて自動的にログインされます。

ログイン後、以下のキャプチャのようにSysprepの実行確認のウィンドウが表示されますが
「キャンセル」して次の処理に入ってください。
(再起動をすると毎回聞かれますが、すべて「キャンセル」で統一します。)

image.png

USBブート後~マスターイメージ作成前のおまじない

監査モードで起動する際、ネットワークに繋いだままだと
セットアップの段階でWindows UpdateやWindows ストアアプリの更新が自動で入り
最後にsysprepする際にエラーが発生することがあります。
(他記事等にも記されています。)

この場合、ログを確認したうえで
対象のアプリをアンインストールするなど余計な手間が発生するので
オフライン上で下記の対応を先に実施します。


タスクスケジューラ - ストアアプリの英語化の回避

→パス:Microsoft\Windows\AppxDeploymentClient\Pre-staged app cleanup​
該当のタスクを右クリック→「無効」をクリックする。

image.png

グループポリシーの変更

以下のパスの値をすべて「有効」にする。

Path:コンピューターの管理\管理用テンプレート\Windowsコンポーネント\

・クラウドコンテンツ\Microsoftコンシューマー エクスペリエンスを無効にする​
・ストア\更新プログラムの自動ダウンロードおよび手動インストールをオフにする​
・ストア\最新バージョンのWindowsへの更新プログラム提供をオフにする​

これらの設定を反映させるため、コマンドプロンプト上で「gpupdate /force」を実行し
ネットワークに繋いで設定を継続してください。

通常通りの手動キッティングを実施

各々の規格に合わせて、設定を実施してください。
ただし、ユーザープロファイルの一部設定項目は反映されませんので
セッティングするうえで留意いただく必要がございます。


→例)
 ・既定のアプリ
 ・(Win11環境であれば)スタートメニュー・タスクバーのピン留め
 ・セキュリティとメンテナンスの設定を変更(通知メッセージのオン/オフ設定)
 ・ブラウザの一部設定項目(起動時に開くタブページ設定とか)


他にもうまく反映されない箇所があるかもしれません。

なお、初回の起動でグレーアウトになっている設定項目については
WindowsUpdateを実施することで設定できることもあります。

→Windows Update実施時、再起動を求められるケースがあるかと思います。
再起動後はマスターイメージ作成時同様、Sysprepの実行確認のウィンドウが
表示されますが「キャンセル」して次の処理に入ってください。

9.作成したイメージをキャプチャ

諸々必要な作業を完了したら、
Sysprepコマンドを実行して参照マシンをシャットダウンさせます。

以下のコマンドを実行します。

C:\Windows\System32\Sysprep\sysprep /oobe /generalize /unattend:c:\windows\Recovery\OEM\Unattend-OOBE.xml /shutdown

参照マシンがシャットダウンしたら、USBメモリを刺してUSBブートします。

参照マシンに保存してあるWindowsイメージをキャプチャします。
以下のコマンドを実行します。

REM /imagefile, /Name, /descriptionはお好きな名前にしてもらってよいです。

DISM.exe /capture-ffu /imagefile="E:\Images\CustomImage.ffu" /Name:"Custom Image" /capturedrive=\\.\PhysicalDrive0 /description:"Windows 10 22H2 Custom"

処理が完了したら、Windowsカスタムイメージの作成が完了します。

10.イメージングの展開

展開先のPCに作成したUSBメモリを刺して、USBブートさせます。

diskpartを起動し、「USB-B」のレターを確認します。

以下のコマンドを実行し、
カレントディレクトリを変更させてイメージング展開を実行させます。

REM カレントディレクトリ変更
cd /d "<USB-Bのレター>\deployment"

REM ApplyImage.batを実行
ApplyImage.bat "<USB-Bのレター>\Images\<ffuファイル名.ffu>"

その後はリカバリ用パーティションを作成するかなど聞かれるため、
お好きなほうを選択。

リカバリ用パーティションの作成処理内容についてですが
USB-B(O:)\Deployment\CreateRecoveryPartitions-UEFI.txt
に記載されております。

以上。

おまけ

WinPE上で動かす.cmdの内容を改変し
イメージ展開、作成、吸い上げ処理をユーザー側に選択して
勝手に処理を流すバッチファイルを作りました。

もしよかったらどうぞ

@echo off
chcp 65001

powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
wpeinit

cd %~dp0

REM diskpart_script.txt保存先:「D:\deployment_work\22H2\mount\winpe\Windows\System32」
REM diskpart_scriptの中身は[lis vol]しているだけです。

diskpart /s diskpart_script.txt
set /p VolName="USB-Bのボリューム名を入力して下さい(例:E): "

cd /d %VolName%:\deployment

:INPUT
echo 実行内容に合致するパラメータを入力してください
set /p ExecuteParam="a:イメージ展開 / b:イメージ作成 / c:イメージ吸い上げ:"

IF /i "%ExecuteParam%"=="a" (
    ApplyImage.bat %VolName%:\Images\CustomImage.ffu

) ELSE IF /i "%ExecuteParam%"=="b" (
    ApplyImage.bat %VolName%:\Images\install.wim

) ELSE IF /i "%ExecuteParam%"=="c" (
    DISM /capture-ffu /imagefile=%VolName%:\Images\CustomImage.ffu /Name:"Custom Image" /capturedrive=\\.\PhysicalDrive0

) ELSE (
    echo 文字列が不正です。再度ご確認ください。
    goto INPUT

)
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2