今回は、Windows イメージのカスタマイズの続きで、応答ファイルを作成して、現在作業している Windows イメージに仕込みます。

 

 

前回と今回は連続的な作業になっています。既に、Windows イメージをマウントしている状態であれば、そのままで構いません。

マウントしていない場合は、後ほどイメージのマウントを案内するので、それまではマウントしなくても構いません。

では、始めていきましょう。

 

応答ファイルを使って Windows をカスタマイズ

Windows では、応答ファイル (無人応答ファイルとも呼ばれます)を使用して、Windows の初期セットアップ中に Windowsをカスタマイズすることが出来ます。

例えば、初期ユーザーを自動作成したり、EULA (ソフトウェア利用許諾契約) の表示をすっ飛ばしたり、プロダクトキーをあらかじめ仕込んでおいたり・・等々。

ここでは、主に以下のような設定を施しておきます。

  • システムの言語設定、キーボード設定を日本語 (MS-IME) にする
  • あらかじめ Administrator で作成しておいたユーザープロファイルを、Default Users プロファイルにコピーする。
  • プロダクトキーを仕込む
  • 既定の壁紙を設定する

また、Windows イメージに カスタマイズしたスタートメニュー を設定する方法もありますが、これは簡単に述べるだけにしておきます1

 

応答ファイルの構成パスについて

構成パス というのは、Windows をインストールする際に、イメージにカスタマイズを加えることができるそれぞれのフェーズのことです。

構成パス (出典: Microsoft Docs)

構成パス (出典: Microsoft Docs)

 

これらの構成パスの全てを設定するわけではなく、主には specializeoobeSystem が重要になってきます。

それぞれの構成パスに関する説明は次のとおりです。

windowsPE
これらの設定は、Windowsセットアップインストールプログラムによって使用されます。この構成パスが処理された後、対象のコンピュータに Windows イメージがコピーされます。
offlineServicing
DISM コマンドを使用して、無人応答ファイルをオフラインイメージに適用する時に処理されます。WindowsPE 構成パスが成功した後、コンピューターが再起動する前に実行されます。
generalize
この構成パスでは、コンピューター固有の情報が Windows から削除され、Windows イメージをキャプチャして、他のコンピュータに展開できるようになります。
specialize
多くの設定はここに追加する必要があります。これらの設定は、監査モード (auditMode) と、OOBE (Out Of Box Experience) モードの開始時にトリガーされます。また、この構成パスで、一意のセキュリティID (SID) が生成されます。ネットワークの構成、インターナショナル設定、ドメイン設定などの多くの機能はここで構成します。
auditMode
この構成パスは、監査モード開始時にすぐに実行されます。
oobeSystem
「Windows へようこそ」が開始される前に実行されます。ユーザーアカウントの作成、言語とロケールの設定を指定するために使用されます。

上記のうち、auditMode と、oobeSystem は排他になります。監査モードに入るときには、oobeSystem は実行されませんし、oobeSystem が実行されるときには、auditMode は適用されません。

 

応答ファイルの作成

応答ファイルは、Windows システムイメージマネージャー (SIM) を使用して作成します。SIM は Windows ADK に既にバンドルされているので、そちらから起動します。

 

Windows SIM を使用する

Windows システムイメージマネージャー (SIM) は、

[スタートメニュー] → [Windows Kits] → [Windows システムイメージマネージャー]

と辿っていき、右クリックして [その他] → [管理者として実行] します。

無人応答ファイルの作成:Windows システムイメージマネージャー (SIM)

無人応答ファイルの作成:Windows システムイメージマネージャー (SIM)

 

Windows SIM でカタログファイルの作成

応答ファイルを作成するには、実際に作成しようとしている Windows のイメージファイル (WIM) からカタログファイルを作成する必要があります。

カタログファイルには、Windows イメージ内の設定とパッケージのみを含むバイナリファイルで、Windows イメージを使って作成することができます。このファイルは、Windows SIM でのみ使用されます。

前回 の記事で、Windows 10 のライセンスメディアから install.wim を作業用ディレクトリにコピーしていると思うので、それを利用してカタログ情報を取得します。

まず、[ファイル] → [Windows イメージの選択] で、作業用ディレクトリの Images に保存した、install.wim を選択し、開きます。

イメージの選択」 が開いたら、利用するイメージを選択します。これから作成したいのは、Windows 10 Pro のイメージなので、Windows 10 Pro を選択します。

無人応答ファイルの作成:Windows イメージの選択

無人応答ファイルの作成:Windows イメージの選択

 

Windows System Image Manager」のダイアログが開くので、[はい] をクリックすると、カタログファイルの作成が始まるのでしばらく待ちます。

カタログファイルが読み終わると、[Windows イメージ] ペインの [Components] にコンポーネントの一覧がインポートされます。

無人応答ファイルの作成:カタログファイルの読み込み

無人応答ファイルの作成:カタログファイルの読み込み

 

応答ファイルの作成と基本操作

これで準備ができたので、応答ファイルを作成しましょう。

[ファイル] → [新しい応答ファイル] をクリックします。

無人応答ファイルの作成:新しい応答ファイルの作成

無人応答ファイルの作成:新しい応答ファイルの作成

 

[応答ファイル] ペインに応答ファイルの構成パスが表示されます。

無人応答ファイルの作成:応答ファイルの構成パス

無人応答ファイルの作成:応答ファイルの構成パス

 

この構成パスに先程のコンポーネントを割り当てていきます。

コンポーネントを構成パスに実際に割り当ててみる例は以下のとおりです。

まず、 [ Windows イメージ ] ペインの

  1. [amd64_Microsoft-Windows-Shell-Setup_10.0.XXXXX.XXX_neutral]2 を右クリックして
  2. [パス 4 specialize に設定を追加] をクリック。
無人応答ファイルの作成:コンポーネントを構成パスに追加

無人応答ファイルの作成:コンポーネントを構成パスに追加

 

すると、[ 応答ファイル ] ペインの [4 specialize] に項目が追加されます。

無人応答ファイルの作成:コンポーネントを構成パスに追加

無人応答ファイルの作成:コンポーネントを構成パスに追加

 

続いて、[応答ファイル] ペインの [Components] → [4 specialize] → [amd64_Microsoft-Windows-Shell-Setup_neutral] をクリックすると、[ Microsoft-Windows-Shell-Setup プロパティ ] にプロパティと設定の一覧が表示されます。

プロパティの [ CopyProfile ] の値を [ true ] に設定します。

無人応答ファイルの作成:プロパティの変更

無人応答ファイルの作成:プロパティの変更

 

このように、Windows イメージのコンポーネントを、応答ファイルの構成パスに配備していく形で、応答ファイルを作成していきます。

ここで、各構成パスごとに自身の行った設定を紹介してみたいと思います。

 

構成パスとコンポーネントの設定例

Windows PE

Microsoft-Windows-International-Core-WinPE

Windows PE で使用される言語を設定します。

  • InputLocale: 0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}
    → MS-IME を使う構成です。
  • LeyeredDriver: 6
    → 日本語106/109キーボードを使う構成です。
  • SystemLocale: ja-JP
  • UILanguage: ja-JP
  • UILanguageFallback: en-US
  • UserLocale: ja-JP
  • SetupUILanguage
    • UILanguage: ja-JP

 

Generalize

Microsoft-Windows-PnpSysprep

作成した参照マシンを Generalize (一般化) する際に、参照マシンにインストールされているデバイスのドライバやその他のドライバを削除します。

  • DoNotCleanUpNonPresentDevices: false
  • PersistAllDeviceInstalls: false

 

Specialize

Microsoft-Windows-Shell-Setup

  • CopyProfile: true
    → 参照マシンで作成した Administrator のユーザープロファイルを、Default Users プロファイルにコピーします。
  • ComputerName: *
    → 展開先のPCのホスト名を自動生成します。
  • ProductKey: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    → ライセンスで取得しているプロダクトキーを指定します。
  • TimeZone: Tokyo Standard Time
  • OEMName: Studio Rough and Cheap
    ここは任意でOK
  • OEMInformation: この部分は任意でOK。内容は、システム詳細情報のサポート欄に表示されます。
    • Logo: %windir%\System32\OEM\oem.logo
      → この部分は未使用になっているみたいで、本来必要ないかもしれませn。
    • Manufactuer: Studio Rough And Cheap Support Team
      → 情報に表示されます。必要に応じてどうぞ。
    • Model: 20H2 CUSTOM IMAGE MODEL
      → システム詳細情報に表示されます。
    • SupportURL: https://www.rough-and-cheap.jp/
      → これ以下はサポート情報に表示されます。
    • SupportHours: 9:00-18:00
      → サポート受付時間
    • SupportPhone: XXX-XXXX-XXXX
      → サポート連絡先

 

oobeSystem

Microsoft-Windows-International-Core

  • InputLocale: 0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}
    → 詳細は下の表を参照。
InputLocale 説明
0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76} Microsoft IME
0411:{D5A86FD5-5308-47EA-AD16-9C4EB160EC3C}{773EB24E-CA1D-4B1B-B420-FA985BB0B80D} Google日本語入力
0411:{B166439D-B0E1-4F24-BA36-E88CAA865815}{0B557B4C-5740-4110-A60A-1493FA10BF2B} ATOK 2016

 

  • SystemLocale: ja-JP
  • UILanguage: ja-JP
  • UILanguageFallback: en-US
  • UserLocale: ja-JP

 

Microsoft-Windows-Shell-Setup

  • TimeZone: Tokyo Standard Time
  • OOBE
    • HideEULAPage: true
      → EULA (ソフトウェア利用許諾契約) のページをすっ飛ばします。
    • ProtectYourPC: 3
      こちらに書かれているように、PCを保護するための簡易設定を有効にするか無効にするか設定します。 3 を指定したときは、無効にします。
    • HideOnlineAccountScreen: true
      → オンラインアカウントでサインインするページを非表示にします。
    • HideLocalAccountScreen: true
      → 管理者アカウントの設定は、応答ファイル中でする (後述) ので、OOBE 中では表示させません。
    • HideWirelessSetupInOOBE: true
      → ワイヤレスネットワークへの接続画面を非表示にします。
    • NetworkLocation: work
      → ネットワークの場所を、オフィスネットワーク(プライベート)で設定します。
  • Themes: 既定のテーマの設定をします。
    • ThemeName: Rough and Cheap Theme
      → テーマの名前。適当で可。
    • DesktopBackground: %windir%\System32\OEM\default-wallpaper.jpg
      → デフォルトの壁紙。パスは、イメージ上のパスになります。
  • UserAccounts: 詳細は下記参照。

応答ファイルで、予め管理用のローカルアカウントを作成するには、次のようにします。

  • Microsoft-Windows-Shell-Setup / UserAccounts / LocalAccounts を右クリックして 「新しい LocallAccount の挿入」をクリックします。
Windows システムイメージマネージャ: 管理用アカウントの登録

Windows システムイメージマネージャ: 管理用アカウントの登録

  • Microsoft-Windows-Shell-Setup / UserAccounts / LocalAccounts / LocalAccount で次の項目に値を設定する
    • Group: Administrators
    • Name: 任意のユーザー名

これで、LocalAccount の直下に、Password という項目が追加されると思います。

  • Password
    • PlainText: 通常、true になっています。
    • Value: パスワードを指定します。

ちなみに、パスワードはプレーンテキストになっていますが、応答ファイルを保存する際にハッシュ化されます。

 

Microsoft-Windows-Deployment

  • Reseal: Audit
    → 監査モードで起動します。

本来は OOBE として設定すべきなのですが、ここでは Audit として設定しておきます。

 

応答ファイルの保存

ここまでの構成ができたら、[ツール] → [応答ファイルの検証]でエラーをチェックします。

特にエラーがなければ、ファイル名を Unattend-Audit.xml として、作業用ディレクトリの AnswerFiles ディレクトリに保存します。

次に、この Unattend-Audit.xml をコピーし、Unattend-OOBE.xml として AnswerFiles ディレクトリにペーストします。

そして、Unattend-OOBE.xml を「メモ帳」などの適当なテキストエディタで開き、次の場所を見つけます。

<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Reseal>
        <Mode>Audit</Mode>
    </Reseal>
</component>

 

見つけたら、Audit の部分を、OOBE と書き換えて、上書き保存します。

これで、

  • Unattend-Audit.xml
  • Unattend-OOBE.xml

の2つの応答ファイルができました。

 

Windows イメージのカスタマイズを進める

ここで再び、Windows イメージの再登場になります。

既にマウントしている方は、そのままで良いですが、一旦マウントを解除している方はもう一度マウントします。

Dism /Mount-Wim /Wim-File:images\basicimage.wim /Index:1 /MountDir:mount\windows

 

Windows イメージに応答ファイルをコピー

Windows が起動時に検索できるように、C:\Windows\Panther ディレクトリを作成します。

md mount\windows\Windows\Panther

 

C:\Windows\Panther に、AnswerFiles\Unattend-Audit.xml をコピーします。ファイル名は、Unattend.xml とします。

copy AnswerFiles\Unattend-Audit.xml mount\windows\Windows\Panther\Unattend.xml

 

これで、参照マシンを起動時に 「監査モード」 で起動できるようになります。

次に、AnswerFiles\Unattend-OOBE.xml を、C:\Recovery\OEM にコピーします。ファイル名はそのままで良いです。

md mount\windows\Recovery\OEM
copy AnswerFiles\Unattend-OOBE.xml mount\windows\Windows\Panther

 

スタートメニューのカスタマイズ

展開する Windows イメージに、予めカスタマイズしておいたスタートメニューを設定することができます。

この記事の冒頭でも書いたように、簡単にさわりだけを述べるにとどめておきます。

要約しますと、LayoutModification.xml というファイルを作成して、それを Windowsイメージのデフォルトユーザープロファイルに保存するだけです。

デフォルトユーザープロファイルというのは、今マウントしているイメージで言えば、

mount\windows\Users\Default\AppData\Local\Microsoft\Windows\Shell

 

に保存します。

参考として、先に作成した USB-B の中に StartLayout\LayoutModification.xml がありますので、一度見てみるといいかもしれません。

また、Microsoft ドキュメントでは、

というドキュメントも参考になるかもしれませんし、参考にならないかもしれません。

いずれにしても、この方法では、

  • 実際に実機に展開するまで結果がわからない

という問題があるので、色々試行錯誤できる時間があれば試してみてもよいのですが、会社や組織で ActiveDirectory で運用されている場合は、グループポリシーでもスタートレイアウトは構成できるので、そちらの方が、早く簡単に動作を確認することができまし、展開させることができます。

 

スタートメニューのショートカット

スタートメニューをイメージに含めるか、あるいはグループポリシーで構成するか、いずれにするのかは別として、スタートメニューに追加したい項目については、.url ファイルや、.lnk ファイルを所定のディレクトリに追加しておく必要があります (追加しなくても良い方法もありますが、詳細は前述のドキュメントを参照してください)。

例えば以下のようにして、Windows のイメージに対してコピーしておきます。

Copy Resources\shortcuts\hoge.url  "mount\Windows\ProgramData\Microsoft\Windows\Start Menu\Programs"
Copy Resources\shortcuts\fuga.lnk "mount\Windows\ProgramData\Microsoft\Windows\Start Menu\Programs"

 

その他諸々

予め禁断のディレクトリ、%Windir%\System32OEM ディレクトリを作成しておきます3

md mount\windows\Windows\System32\OEM

 

アイコンファイル

もし、組織独自のアイコンなどを予め追加しておきたい場合は、次のようにしてファイルをイメージにコピーします。

copy Resources\icons\* mount\windows\Windows\System32\OEM

 

壁紙

応答ファイルで指定しているテーマの壁紙をイメージにコピーします。

copy Resources\wallpapers\default-wallpaper.jpg mount\windows\Windows\System32\OEM

 

その他

その他、オフラインの Windows イメージで、コピー等が可能なファイルは予めコピーしておくと便利です。

例えば、

  • mount\windows\Users\Public\Desktop には、共通のデスクトップショートカットを置いておく事ができます。
  • mount\windows\Users\Public\{Videos, Pictures} には、共通のイメージや動画を置いておく事ができます。

 

Windows イメージのアンマウント

Windows イメージを最適化する

Windows イメージをアンマウントする前にイメージを最適化し、イメージのサイズを可能な限り小さくします。

イメージを最適化するには、Dism /Cleanup-Image を使います。

dism /Image:mount\windows /Cleanup-Image /StartComponentCleanup

 

前回、.NET Framework 3.5 の機能をインストールした場合は、次のようなエラーが出るかもしれません。

エラー: 0x800f0806

保留中の操作があるため、この操作を完了できませんでした。

DISM ログ ファイルは C:\WINDOWS\Logs\DISM\dism.log にあります

 

これは原因がはっきりとはわからないのですが、/Get-Packages オプションで見てみると、

パッケージ ID : Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~~10.0.19041.1
状態 : インストールの保留中
リリースの種類 : OnDemand Pack
インストール時刻 : 2021/03/10 0:35

 

とこんな感じで、インストールが保留されている状態になっています。

実際、上記エラーメッセージ中の C:\WINDOWS\Logs\DISM\dism.log を見ても、保留中のパッケージがあるのでエラーになっている、という旨のログが出力されていました。

・・では、どうすればいいのか。

それは、ここではこの問題はあえて無視します。

上のコマンドは、あくまでもイメージのサイズを縮小させるために、不要なパッケージを削除したりするのが目的なので、特に必要がなければ この最適化の部分はスキップしても大丈夫 です4

 

Windows イメージのアンマウント

続いて、Windows イメージをアンマウントします。

ただし、アンマウントする際に、

  • イメージ内のファイルを別のアプリケーションで開いていている
  • イメージ内のディレクトリをエクスプローラで開いていている
  • 展開およびイメージングツール環境 のカレントディレクトリが、イメージ内のディレクトリである

ような場合、アンマウントが失敗 するので予め確認しておきます。

アンマウントするには、Dism /Unmount-Image を使用します。

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

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

イメージを保存しています
[==========================100.0%==========================]
イメージのマウントを解除しています
[==========================100.0%==========================]
操作は正常に完了しました。

 

万が一閉じ忘れているファイルがあったりして、アンマウントが失敗した場合は次のようなエラーが出ます。

dism /unmount-image /mountdir:d:\deployment_work\2004\winpe_amd64\mount /commit

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

イメージを保存しています
[==========================100.0%==========================]
イメージのマウントを解除しています
[==========================100.0%==========================]

エラー: 0xc1420117

ディレクトリを完全にはマウント解除できませんでした。これは通常、アプリケーションがマウント ディレクトリ内のファイルを開 いていることが原因です。マウント解除のプロセスを完了するには、これらのファイルを閉じてから、再度マウントを解除してください。

DISM ログ ファイルは C:\WINDOWS\Logs\DISM\dism.log にあります

 

この場合、既にイメージのコミットは完了している ので、開いたままになっているアプリケーションを閉じて、再度アンマウントを実行します。この時、コミットは既に終わっているので、/Commit オプションをつけるとエラーになります。その場合は、/Discard を付けてアンマウントしましょう。

dism /unmount-image /mountdir:d:\deployment_work\2004\winpe_amd64\mount /discard

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

イメージのマウントを解除しています
[==========================100.0%==========================]
操作は正常に完了しました。

 

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

次に、カスタマイズした Windows イメージを install.wim としてエクスポートします。

まず、元々ソースとなった ISO イメージからコピーした install.wim を削除します。

del Images\install.wim

 

次に、Dism /Export-Image を使って、カスタムしたイメージ basicimage.wim から install.wim をエクスポートします。

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

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

イメージをエクスポートしています
[==========================100.0%==========================]
操作は正常に完了しました。

 

この段階で、作業用ディレクトリの Images ディレクトリには、次のようなファイルが存在しているはずです。一度ここで整理しておきましょう。

basicimage.wim     # カスタムしたイメージ
boot2.wim          # Windows PE のカスタムイメージ
install-backup.wim # ソースISO からコピーしたオリジナルのイメージ
install.wim        # カスタムイメージからエクスポートしたイメージ

 

次回予告

今回、応答ファイルを作成してWindows イメージに仕込み、更に様々な細々としたファイルを追加したりして、それを install.wim としてエクスポートしました。

次回は、このエクスポートしたファイルを使って、参照マシンを作成していきます。


  1. 筆者の環境では動作がイマイチよくわからんかった、というのと、グループポリシーで配布する方が楽そうだという判断からです。 

  2. XXXXX.XXX の部分はイメージのバージョンによって 17763.118362.329 など変わります。 

  3. %Windir%\System32 でなくてはいけない、というわけでもないので応答ファイルなどと辻褄さえあえば、どこに作成しても構いません。 

  4. 動作は確認しました。 


 

 

zaturendo

中小企業社内SE。

2件のコメント

匿名 · 2021年6月4日 10:49 AM

この続きを知りたいです。続編期待しています。

    zaturendo · 2021年6月7日 10:33 AM

    ありがとうございます。
    もうすでにほぼ出来上がっているので、もう少しお待ち下さい・・。

コメントを残す

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

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