前回は、Windows PE のイメージをカスタマイズして、起動が可能なように USBメモリにインストール・起動の確認をしてみました。
今回は実際にインストールに使う Windows のイメージをカスタマイズしていきます。
Windows イメージのカスタマイズ
前回、Windows PE のイメージでも行ったように、Dism コマンドを使ってイメージをマウントし、Windows をオフラインでカスタマイズすることが出来ます。
Microsoft のドキュメントに、オフラインとオンラインとで実行できるカスタマイズの違いが示されています。
その内容は以下の通りになります。
種類 | オフライン | オンライン |
---|---|---|
デバイスドライバーの追加 | ✓ | ✓ |
Microsoft Store アプリの追加 | ✓ | ✓ |
デスクトップアプリの追加 | ‐ | ✓ |
言語パックの追加 | ✓ | ✓ |
既定の言語パックの削除 | ✓ | ‐ |
オンデマンド機能の選択 | ✓ | ✓ |
最新の累積的な更新プログラムの追加 | ✓ | ✓ |
イメージの最適化 | ✓ | ✓ |
Microsoft Store アプリの重複ファイルのクリーンアップ | ✓ | ‐ |
Microsoft Office | ✓ | ✓ |
この評価らもわかるように、必ずしもオフラインでイメージをカスタマイズする必要は無いとも言えます。
オフラインでのみで可能な項目は、
- 既定の言語パックの削除
- Microsoft Store アプリの重複ファイルのクリーンアップ
程度しか有りません。
以上から、ここでは概要を主に説明しますが、一つだけ確認しておくと、オフラインでのイメージカスタマイズの利点の一つは、
「いちいちシステムを再起動しなくてもよい」
点にあります。よって、作成する環境によってオフラインでカスタマイズするか、オンラインでカスタマイズするか、その重量配分を決定すると良いでしょう。
Windows イメージの準備
ISOイメージのマウント
準備しておいた、Windows 10 ボリュームライセンスメディア (ISOファイル) を 作業用PC にマウントします。
Windows 10 では、ISOイメージファイルを、いちいち光学メディアに焼くことなしに直接マウントすることができます。
方法は簡単で、エクスプローラで ISOファイルを右クリックして [マウント] を選ぶだけです。
必要な Windows イメージファイルをエクスポート
次に Windows イメージを作業用フォルダーにバックアップとしてコピーしておきます。
ここでは、Windows ライセンスメディアの ISO がマウントされているのが、K: ドライブとします。
ここから以下は、特に支持がない限りは作業用ディレクトリ (D:\deployment_work\20H2 ) で作業しているものとします。 |
- スタートメニューから、[展開とイメージングツール環境] を 管理者 として開きます。
- 展開とイメージングツール環境 で次のようにして、イメージファイル
K:\sources\install.wim
を作業用ディレクトリのImages\install.wim
としてコピーします。
copy K:\sources\install.wim D:\Deployment_work\20H2\Images\install.wim
- 万が一に備えて、
install.wim
をinstall-backup.wim
としてファイルのバックアップを作成しておきます。
# 作業用ディレクトリで
copy Images/install.wim Images/install-backup.wim
install.wim
には複数の Windows のエディションが含まれています。
そのインデックスを取得するために、Dism /Get-ImageInfo
を使用し、Windows Pro のインデックス番号を控えておきます。
dism /Get-ImageInfo /ImageFile:images\install.wim
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージの詳細: images\install.wim
:
:
インデックス: 3
名前: Windows 10 Pro
説明: Windows 10 Pro
サイズ: 15,009,520,795 バイト
:
:
操作は正常に完了しました。
- 次に、
Dism /Export-Image
を使って、install.wim
から Windows 10 Pro のイメージを取り出し、basicimage.wim
として保存します。
dism /Export-Image /SourceimageFile:images\install.wim /SourceIndex:3 /DestinationImageFile:images\basicimage.wim
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージをエクスポートしています
[==========================100.0%==========================]
操作は正常に完了しました。
Windows イメージをマウント
Dism /Mount-Wim
を使用して、エクスポートした basicimage.wim
を作業用ディレクトリの mount\windows
にマウントします。
# Windows イメージのマウント
Dism /Mount-Wim /WimFile:images\basicimage.wim /index:1 /MountDir:mount\windows
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージをマウントしています
[==========================100.0%==========================]
操作は正常に完了しました。
これで、Windows イメージをファイルシステム上から直接参照することができるようになりました。
この、mount\windows
のディレクトリ以下には、Windows
や Users
、Program Files
など、Cドライブでおなじみのファイル群を見ることができ、リファレンス (参照用) となる Windows の雛形になります。
Windows RE (Windows 回復環境)
この項目では、Windows RE (Recovery Environment: 回復環境) のイメージのマウント方法について述べますが、先の記事でも書いている通り、このシリーズでは回復環境の構築は省きます1。
もし詳細な情報が知りたい場合は、難解な翻訳に翻弄される可能性 (笑2) がありますが、Microsoft のドキュメントを参照してください。
というわけで、ここでは主に WinREイメージのマウントについて書いていきたいと思います。
Windows RE イメージのマウント
Windows RE (WinRE) は Windows が正常に起動できないときのフェールオーバーとして使用される環境のことを指し、Windows PE に基づいています。
WinRE イメージは、Windows イメージに内包されています。
このことから、WinRE イメージをマウントする場合は、まず先に Windows イメージをマウントしている必要があります。
それぞれのイメージをカスタマイズする際の手順はざっくりですが以下のようになります。
- Windows イメージをマウント
- WinRE イメージをマウント
- それぞれのイメージをカスタマイズ
- WinRE イメージを最適化し、コミットしてアンマウント
- Windows イメージを最適化し、コミットしてアンマウント。
WinRE イメージには、次のようなカスタマイズをすることができます。
- ドライバーの追加
- Windows の更新プログラムを追加
- 言語を追加
WinRE イメージをマウントするには、Windows イメージと同じく Dism /Mount-Wim
を使用します。
また、WinRE イメージは、作業用ディレクトリの、mount\windows\Windows\System32\Recovery\winre.wim
にあります。
イメージのマウント先は同じく作業用ディレクトリの、mount\winre
とします。
Dism /Mount-Wim /WimFile:mount\windows\Windows\System32\Recovery\winre.wim /index:1 /MountDir:mount\winre
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージをマウントしています
[==========================100.0%==========================]
操作は正常に完了しました。
Windows RE イメージのアンマウント
作業を終了し、WinRE イメージをアンマウントする前に、WinRE を最適化します。
- WinRE イメージの scratchspace サイズを増やします
dism /image:mount\winre /set-scratchspace:512
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージのバージョン: 10.0.19041.1
スクラッチ領域: 512 MB
操作は正常に完了しました。
- 使用されていないファイルをクリーンアップし、WinRE のサイズを小さくします。
dism /image:mount\winre /cleanup-image /startcomponentcleanup
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージのバージョン: 10.0.19041.1
[=========== 20.0% ]
操作は正常に完了しました。
- 次に、WinRE をアンマウントします。
dism /unmount-image /mountdir:mount\winre /commit
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージを保存しています
[==========================100.0%==========================]
イメージのマウントを解除しています
[==========================100.0%==========================]
操作は正常に完了しました。
Windows イメージのカスタマイズ
パッケージの確認
Dism /Get-Packages
を使っってWindows イメージに導入されているパッケージの確認をします。
dism /get-packages /image:mount/windows
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージのバージョン: 10.0.19041.450
パッケージの一覧:
:
:
パッケージ ID : Microsoft-Windows-Client-LanguagePack-Package~31bf3856ad364e35~amd64~ja-JP~10.0.19041.450
状態 : インストール済み
リリースの種類 : Language Pack
インストール時刻 : 2020/08/08 8:22
:
:
パッケージ ID : Microsoft-Windows-LanguageFeatures-Basic-ja-jp-Package~31bf3856ad364e35~amd64~~10.0.19041.1
状態 : インストール済み
リリースの種類 : OnDemand Pack
インストール時刻 : 2019/12/07 15:14
:
:
操作は正常に完了しました。
または、/format:table
オプションを用いて確認することもできます。
dism /image:mount\windows /get-packages /format:table
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージのバージョン: 10.0.19042.928
パッケージの一覧:
--------------------------------------------------------------------------------------------------- | -------- | --------------- | ----------------
パッケージ ID | 状態 | リリースの種類 | インストール時刻
--------------------------------------------------------------------------------------------------- | -------- | --------------- | ----------------
:
Microsoft-Windows-Client-LanguagePack-Package~31bf3856ad364e35~amd64~ja-JP~10.0.19041.928 | インストール済み | Language Pack | 2021/04/16 2:53
:
Microsoft-Windows-LanguageFeatures-Basic-ja-jp-Package~31bf3856ad364e35~amd64~~10.0.19041.1 | インストール済み | OnDemand Pack | 2019/12/07 15:14
:
操作は正常に完了しました。
パッケージの一覧がずらずらと表示されますが、上の例からわかるように日本語 (ja-JP) 向けの言語パック (Language Pack) と、言語機能パック (Language Feature) が既に導入されているので、Microsoft のドキュメントにあるような言語と言語機能パックのインストールはしなくても大丈夫です。
言語設定の確認
また、Dism /Get-Intl
を使用して、イメージに適用されている言語設定を確認します。
dism /image:mount\windows /get-intl
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージのバージョン: 10.0.19041.450
オフラインの地域と言語の設定をレポートしています。
既定のシステム UI 言語 : ja-JP
UI 言語フォールバック: : en-US
システム ロケール : ja-JP
既定のタイム ゾーン : Tokyo Standard Time
既定ユーザーのユーザー ロケール : ja-JP
場所 : 日本 (GEOID = 122)
アクティブなキーボード : 0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}, 0411:{D5A86FD5-5308-47EA-AD16-9C4EB160EC3C}{773EB24E-CA1D-4B1B-B420-FA985BB0B80D}
キーボード レイヤード ドライバー : インストールされていません。
インストールされている言語: ja-JP
種類: 部分的にローカライズされた言語、MUI。
フォールバック言語 en-US
操作は正常に完了しました。
Windows PE の時 とは違って、すでにシステムの言語設定も日本語になっているので、基本このままでも問題ないですが、上のケースの場合、キーボードレイヤードドライバーが未設定 なのでこちらを設定しておきます。
キーボードが日本語106/109キーボードであれば、以下のようになります。
Dism /Image:mount\windows /Set-Layereddriver:6
Windows イメージにドライバを追加
ドライバの追加に関しては、簡単に方法のみを述べます。
ドライバに関しては、例えばあらかじめインストール時に必要になることがわかっているドライバに関してのみ、イメージに追加しておくと良いと思います。
ちなみに、Intel NUC の場合は、標準の Windows イメージではイーサネット関連のドライバが入っていないようで、別途、Windows セットアップ後にインストールする必要がありました。よって、こういう場合はあらかじめ、デバイスドライバをイメージに登録しておく法が良いかもしれません。
ドライバをイメージに追加するには、*.inf
形式のファイルを用意しておきます。
例えば、ドライバーファイルが C:\Drivers\PnP.Media\media.inf
にあるとすると、次のように Dism /Add-Driver
で追加します。
Dism /Add-Driver /Image:"mount\windows" /Driver:"C:\Drivers\PnP.Media.V1\media1.inf"
また、指定したディレクトリから再帰的にドライバをインストールしたい場合は、次のように /Recurse
オプションをつけます。
Dism /Add-Driver /Image:"mount\windows" /Driver:c:\drivers /Recurse
イメージに含まれているドライバを確認するには、/Get-Drivers
オプションを使用します。
Dism /Get-Drivers /Image:"C:\mount\windows"
Windows イメージに更新プログラムを追加
Windows イメージに更新を追加するには、まず Windows 10 の更新履歴 から最新の累積的な更新プログラムの情報を取得して、Microsoft Update カタログから取得します。
この記事を書いている時点での最新の更新は、「2021 年 4 月 13 日 - KB5001330 (OS ビルド 19041.928 および 19042.928)」 となっていますが、これを Updateカタログで検索してみます。
このような感じで、更新プログラムの一覧がリストアップされるので、必要な更新ファイルをダウンロードします。
この時、OS (Windows 10, Windows Server
)、OSバージョン (20H2
)、アーキテクチャ (x86, x64, arm
) を必ず合わせるようにしてください。
このリストの場合、一番目の "2021-04 Dynamic Cumulative Update for Windows 10 Version 20H2 for x64-based.." という更新と、3番目の "2021-05 x64 ベースすステム用 Windows 10 Version 20H2 の累積更新プログラム..." と2つありますが、おそらくは後者のアップデートのみで大丈夫だと思います。
こちらのダウンロードをクリックして適当なフォルダに .msu
ファイルをダウンロードし、Dism /Add-Package
でイメージに更新を追加します。/PackagePath
オプションで、更新ファイルのパスを渡します。
dism /add-package /image:mount\windows /packagepath:path\to\windows10.0-kb5001330-x64_48f2955cc5688bf56b32be1cca4cd1f02f1d36e2.msu
展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1
イメージのバージョン: 10.0.19042.746
1 / 1 を処理しています - 操作は正常に完了しました。
もし複数のアップデートファイルを追加する必要がある場合は、次のようにします。
dism /add-package /image:mount\windows /packagepath:path\to\package1 /packagepath:path\to\package2 ..
次にアップデートをロックして、リカバリ中に確実に復元されるようにします。
まず先に、アップデートファイルを展開するために使う一時ディレクトリを作成します。
md C:\Temp
一時ディレクトリを作成したら、次のようにイメージをクリーンアップします。
dism /cleanup-image /image=mount\windows /startcomponentcleanup /scratchdir:C:\Temp
更新プログラムがイメージに含まれていることを、Dism /Get-Packages
を使って確認します。
dism /image:mount\windows /Get-Packages
パッケージの一覧に、以下のような項目が含まれているかを確認します。
パッケージ ID : Package_for_RollupFix~31bf3856ad364e35~amd64~~19041.928.1.10
状態 : インストール済み
リリースの種類 : Security Update
インストール時刻 : 2021/04/16 2:53
Windows イメージに機能を追加
必要に応じて、Windows イメージに機能を追加することができます。これは、オンライン中の Windows であれば、「Windows の機能の有効化または無効化 (OptionalFeatures.exe)」 から設定ができるものですが、ここではオフラインの Windows イメージに追加する方法を説明します。
なお、追加の機能が必要ではない場合、この項目は飛ばしても問題ありません。
ここでは、以下の機能を追加しようと思います。
Windows イメージでの機能の確認
Dism /Get-Features
を使用することで、イメージでの Windows の機能の一覧を表示させることができます。
dism /image:mount\windows /get-features
情報を絞り込むために、/format:table
オプションと find
コマンドを利用して以下のようにもできます。
Dism /image:mount/windows /get-features /format:table | find /i "netfx3"
NetFx3 | 無効
また、同様に SMB1 に関しても確認してみます。
Dism /image:mount/windows /get-features /format:table | find /i "smb"
SMB1Protocol-Deprecation | 無効
SMB1Protocol | 無効
SMB1Protocol-Client | 無効
SMB1Protocol-Server | 無効
いずれにしても、機能は無効であることがわかります。
.NET Framework 3.5 の機能をインストールする
また、.NET Framework の機能を有効にするには、Features On Demand (FOD) のディスクが必要になります。このディスクは、あらかじめ VLSC からダウンロードしておく必要があります。
以下、.NET フレームワーク2.5/3 を追加しようとしますが、後述の通り(筆者の環境においては)一部でMSのドキュメントでは触れられていない挙動が発生するので、その点については注意が必要です。 |
- 作業PCに、FOD の ISOイメージファイルをマウントします (ここでは、K:ドライブ にマウントされているものとします)。
- 作業ディレクトリで、
Dism /Get-Capabilities
を使って、イメージで利用可能な FODの一覧を表示させます。
dism /image:mount\windows /get-capabilities
実際には、かなりの行が出力されるので、以下のように抽出してみます。
Dism /image:mount\windows /get-capabilities /format:table |find /i "netfx3"
NetFX3~~~~ | 存在しない
このように、.NET Framework はインストールされていない状況です。
Dism /Add-Capability
を使用して、.NETフレームワークをイメージに追加します。/Source
オプションで、FOD をマウントしているドライブを指定します。
dism /image:mount\windows /add-capability /capabilityname:netfx3~~~~ /source:K:
追加後、Dism /Get-Capabilities
で確認すると、
NetFX3~~~~ | インストール済み
となっており、インストールされたことがわかります。
.NET Framework 3.5 の機能を有効化
Dism /Enable-Feature
を使って、先程インストールした機能を有効ににします。
Dism /image:mount\windows /enable-feature /featurename:"NetFx3"
Get-Features
で確認すると、下のように機能が有効になっているのがわかります。
Dism /image:mount/windows /get-features /format:table | find /i "netfx3"
NetFx3 | 有効
SMB 1.0/CIFS ファイル共有サポートの機能を有効化
こちらは、FOD のパッケージを導入する必要もなく、単に機能を有効化することで作業は完了します。
ただし、こちらのコマンドは /All
オプションを付けることで、親子関係にある機能をすべて有効にします。
dism /image:mount\windows /enable-feature /featurename:"SMB1Protocol" -All
Windowsイメージのレジストリを変更する
時と場合によりますが、オフラインの Windowsイメージのレジストリを変更したくなるかもしれません5。
かなりマニアックな需要かもしれませんが、オフラインのイメージでレジストリを変更する方法に着いて書いておきます。
まず、イメージのレジストリをインポートします。
reg load HKLM\OFFLINE mount\windows\Windows\System32\Config\SOFTWARE
インポートできるレジストリの項目は、DRIVERS, SECURITY, SAM, SOFTWARE, SYSTEM
になります。
次に、regedit.exe
を起動します。すると、次のように HKEY_LOCAL_MACHINE
に OFFLINE
というレジストリパスができているのがわかります。
これで、いつものように編集するようにして、レジストリを編集することができます。もちろん、
最新の注意を払って
レジストリは編集してください。
編集が終わったら、次の様にして作業マシンに一時的にインポートしていたレジストリをアンロードします。
reg unload HKLM\OFFLINE
少し一服
ここまで、オフラインで Windows イメージに様々な変更を加えていく方法を書いてきましたが、ざっくり書きますとかいいながら、なかなかどうして、記事が長くなってしまいました。
こうして俯瞰してみると、実にさまざまなことをオフラインで変更できるなぁ、というのが実感です。このまま、デスクトップアプリもオフラインでインストールできたらどれだけ楽だろうか、とは思うんですがそればかりは実機でオンラインでインストールするしかないんですよね。
オフラインでのイメージの編集、後もう少しありますが、このまま書いていくと、記事の歩留まりがわるいので、ここで一旦小休止です。
続けて作業される場合は、このままイメージをマウントしたまま次の記事へ行ってください。
反対に、ここで作業を中断して、作業用PCの電源を切りたいのであれば、イメージのマウントを解除しましょう。
マウントの解除は、
dism /unmount-image /mountdir:mount\windows /commit
とします。/Commit
をつけ忘れると、これまでの変更がパーになるんで気をつけましょう。
逆にCommitしたくないからと言って何もつけずに実行すると Dism コマンドに怒られます。その場合は、/Discard
オプションを付ければ、これまでの変更はなかったことになります。
それでは、お疲れさまでした。
(次回へ続く)
-
というのも筆者の環境では、Windows 回復環境を使用しないといけない状況では、ユーザーからシステム部門宛に問題の発生したPCが送られてきて、システム部門で(回復環境を使用せずに)不具合に対処し、それでも無理な場合は回復ではなく、再インストールすることを選ぶからです。 ↩
-
Microsoft のドキュメントは機械翻訳とはいえ、日本語で読めるのはいいのですが、微妙な翻訳に凄まじいリンク地獄で必要とする情報の取捨選択には熟練が必要です。 ↩
-
古いアプリケーションでは、未だにこのバージョンの.NET Framework に依存しているものが多いですよね。この機能は、パッケージ自体が Windows のイメージに含まれていないので、実機で有効にしようとすると、インターネット越しに Windows Update から最新の .NET Framework 3 を取得してくるのですが、オフラインでインストールしておけば、参照マシンを作成するときに、インターネット接続しなくてもよくなります。 ↩
-
Windows 10 のどのバージョンからかは失念しましたが、SMB1 プロトコルサポートが突然外されて、古い NT ドメインや Samba サーバーの共有に接続できなくなる祭りが起きました。なので、会社や組織内でそういった古い共有サーバーを使用する際にはこの機能が必須になります。 ↩
-
後でも説明しますが、キャプチャ後のイメージはなるべくオフラインで作業したくなります。 ↩
0件のコメント