前回は、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 10 で ISOイメージをマウントする

Windows 10 で ISOイメージをマウントする

 

必要な Windows イメージファイルをエクスポート

次に Windows イメージを作業用フォルダーにバックアップとしてコピーしておきます。

ここでは、Windows ライセンスメディアの ISO がマウントされているのが、K: ドライブとします。

ここから以下は、特に支持がない限りは作業用ディレクトリ (D:\deployment_work\20H2) で作業しているものとします。

 

  1. スタートメニューから、[展開とイメージングツール環境]管理者 として開きます。
  2. 展開とイメージングツール環境 で次のようにして、イメージファイル K:\sources\install.wim を作業用ディレクトリの Images\install.wim としてコピーします。

 

copy K:\sources\install.wim D:\Deployment_work\20H2\Images\install.wim

 

  1. 万が一に備えて、install.wiminstall-backup.wim としてファイルのバックアップを作成しておきます。
# 作業用ディレクトリで
copy Images/install.wim Images/install-backup.wim

 

  1. 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 バイト

    :
    :

操作は正常に完了しました。

 

  1. 次に、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 のディレクトリ以下には、WindowsUsersProgram 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 イメージをマウントしている必要があります。

それぞれのイメージをカスタマイズする際の手順はざっくりですが以下のようになります。

  1. Windows イメージをマウント
  2. WinRE イメージをマウント
  3. それぞれのイメージをカスタマイズ
  4. WinRE イメージを最適化し、コミットしてアンマウント
  5. 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 を最適化します。

  1. WinRE イメージの scratchspace サイズを増やします
dism /image:mount\winre /set-scratchspace:512

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1

イメージのバージョン: 10.0.19041.1

スクラッチ領域: 512 MB

操作は正常に完了しました。

 

  1. 使用されていないファイルをクリーンアップし、WinRE のサイズを小さくします。
dism /image:mount\winre /cleanup-image /startcomponentcleanup

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.1

イメージのバージョン: 10.0.19041.1

[===========                20.0%                          ]
操作は正常に完了しました。

 

  1. 次に、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カタログで検索してみます。

Microsoft Update カタログ

Microsoft 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 イメージに追加する方法を説明します。

なお、追加の機能が必要ではない場合、この項目は飛ばしても問題ありません。

ここでは、以下の機能を追加しようと思います。

  • .NET Framework 3.53
  • SMB 1.0/CIFS ファイル共有サポート4

 

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のドキュメントでは触れられていない挙動が発生するので、その点については注意が必要です。

 

  1. 作業PCに、FOD の ISOイメージファイルをマウントします (ここでは、K:ドライブ にマウントされているものとします)。
  2. 作業ディレクトリで、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_MACHINEOFFLINE というレジストリパスができているのがわかります。

regedit

regedit

 

これで、いつものように編集するようにして、レジストリを編集することができます。もちろん、

最新の注意を払って

レジストリは編集してください。

編集が終わったら、次の様にして作業マシンに一時的にインポートしていたレジストリをアンロードします。

reg unload HKLM\OFFLINE

 

少し一服

ここまで、オフラインで Windows イメージに様々な変更を加えていく方法を書いてきましたが、ざっくり書きますとかいいながら、なかなかどうして、記事が長くなってしまいました。

こうして俯瞰してみると、実にさまざまなことをオフラインで変更できるなぁ、というのが実感です。このまま、デスクトップアプリもオフラインでインストールできたらどれだけ楽だろうか、とは思うんですがそればかりは実機でオンラインでインストールするしかないんですよね。

オフラインでのイメージの編集、後もう少しありますが、このまま書いていくと、記事の歩留まりがわるいので、ここで一旦小休止です。

続けて作業される場合は、このままイメージをマウントしたまま次の記事へ行ってください。

反対に、ここで作業を中断して、作業用PCの電源を切りたいのであれば、イメージのマウントを解除しましょう。

マウントの解除は、

dism /unmount-image /mountdir:mount\windows /commit

 

とします。/Commit をつけ忘れると、これまでの変更がパーになるんで気をつけましょう。

逆にCommitしたくないからと言って何もつけずに実行すると Dism コマンドに怒られます。その場合は、/Discard オプションを付ければ、これまでの変更はなかったことになります。

それでは、お疲れさまでした。

(次回へ続く)


  1. というのも筆者の環境では、Windows 回復環境を使用しないといけない状況では、ユーザーからシステム部門宛に問題の発生したPCが送られてきて、システム部門で(回復環境を使用せずに)不具合に対処し、それでも無理な場合は回復ではなく、再インストールすることを選ぶからです。 

  2. Microsoft のドキュメントは機械翻訳とはいえ、日本語で読めるのはいいのですが、微妙な翻訳に凄まじいリンク地獄で必要とする情報の取捨選択には熟練が必要です。 

  3. 古いアプリケーションでは、未だにこのバージョンの.NET Framework に依存しているものが多いですよね。この機能は、パッケージ自体が Windows のイメージに含まれていないので、実機で有効にしようとすると、インターネット越しに Windows Update から最新の .NET Framework 3 を取得してくるのですが、オフラインでインストールしておけば、参照マシンを作成するときに、インターネット接続しなくてもよくなります。 

  4. Windows 10 のどのバージョンからかは失念しましたが、SMB1 プロトコルサポートが突然外されて、古い NT ドメインや Samba サーバーの共有に接続できなくなる祭りが起きました。なので、会社や組織内でそういった古い共有サーバーを使用する際にはこの機能が必須になります。 

  5. 後でも説明しますが、キャプチャ後のイメージはなるべくオフラインで作業したくなります。 


 

 

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です