DISMでイメージ作成・展開をする際に詰まったことなど(個人用覚書)

久々にWindowsに標準搭載されているDISMでイメージ作成を行っているのですが、回復パーティション関連で色々詰まったので自分用の覚書も兼ねてまとめておきたいとおもいます。多分Windows PCを普通に使っている方が見ても特に役には立たないと思います。

Windows PEにはReagentcが含まれていない

無料でダウンロードできるWindows ADK(Windows自動インストールキット)とそのアドオンである「Windows ADK用PEアドオン」で作成できるWindows PEはそれまでのMS-DOS起動ディスクに変わるもので、要するにGUI環境が含まれていないWindows OSそのものなのでDISMなどのコマンドラインツールも使えますし、別途イメージに組む混む作業が必要になりますがイーサネットやWLANなどのネットワーク接続やFirefoxなどGUIベースのアプリも使用できますが、回復ドライブの登録で使うReagentcコマンドは含まれていません(Windows PE自体あくまでサブセットという位置付けなので他にも使用できないコマンドがあるかもしれません)。

ではどうするのかというとdism /Apply-ImageコマンドでCドライブに一般化したマスターイメージをコピーしたあと、展開先のC:¥Windows¥System32フォルダにあるReagentc.exeを呼び出す形で回復ドライブを登録します。

一応Windows PEイメージを作成する際にマウントしたフォルダにテクニシャンPC(作業用PC、無論マスター作成用とは別)のSystem32フォルダに格納されているReagentc.exeとReagen.dllをコピーしてDISM /unmount-image /commitで反映してしまっても良さそうですが、ライセンス的にアレそうなので展開先にあるReagentc.exeを使った方が良さそうです。

多分イメージ展開時にReagentc /Enableは不要

かのあゆの場合USBメモリを2つのパーティションに分け、一つはWindows PE起動用パーティション、もう一つはDISMでキャプチャしたマスターイメージとWindows回復イメージ(マスター作成時に回復パーティションの¥Recovery¥WindowsREに格納されているwinre.wim)をコピーしてWindows PEの自動起動スクリプト(startnet.cmd)とパーティション設定テキストファイルを使ってパーティション分け、各ドライブのフォーマット、マスターイメージの展開、回復イメージのコピーと登録といった作業を行っているのですが、展開が終了して一回普通にOOBEセットアップを行い、コマンドプロンプトなりPowershellなりを立ち上げてReagentc /infoで回復ドライブの登録情報を確認するとdisableの状態になってしまっていました。

回復パーティション内の¥Recovery¥WindowsREにはちゃんとwinre.wimがコピーされているのでreagentc /setreimageで後から手動登録することはできるのですが、キッティング開始する時点で回復ドライブも機能する状態にしておかないと正しいイメージとは言えないので色々確認していたのですが、多分根本的に変な勘違いをしていたことに気付いたのは退勤ギリギリ・・・つまり数時間ほど前の話になります。

Windows PEを起動した際スタートアップ処理を行ってくれるstartnet.cmdで回復ドライブを登録する処理として

Reagentc /Setreimage /Path R:¥Recovery¥WindowsRE /target C:¥Windows

Reagentc /Enable

と記載していたのですが、このうち回復ドライブを有効化するReagentc /Enableに関してはイメージコピー後のSpecialize処理で自動的に登録した回復ドライブの場所を見てenableにステータスを変更してくれるのでバッチに入れるのは回復ドライブの場所を登録する「Setreimage」だけでよかったかもしれません。いちおう朝出社した時点でもう一度Windows PEイメージを編集しなおして試してみますが・・・これで解決しそうな気はします。というかMicrosoftのReagentcコマンド説明ページをよく見たら「Specialize処理の段階で自動的にEnableにするよー」と記載されていました・・・orz

REAgentC のコマンド ライン オプション:Microsoft

追記:朝来ていろいろ検証したのですが、Windows PE上でReagentcによる回復ドライブの有効化作業は完了しているものの、どうもSpeciallize処理自体が行われていない感じなので一般化自体されていないような気がします。とりあえず監査モード状態のバックアップは取っているのでもう一度一般化した状態でイメージを取り直してみようと思います。

おまけ 監査モードでマスターイメージを作る時はオフラインでやれ

当たり前と言えば当たり前なのですが前の作業では普通に監査モードでストアアプリも更新していたのでいちおう覚書として・・・

ハードウェア固有情報などを削除してドライバーやプリインストールするアプリをインストールし、マスターイメージを作り込む時に使う監査モードですが、基本的にここではネットワークに接続しません。

Windows 8あたりからそういう挙動だった記憶があるのですが、普通にネット接続するとMicrosoft Storeで配信されているストアアプリの更新がかかりますが、これをやってしまうと最後にSysprepで一般化する際に失敗します。

なので更新プログラムを適用する場合はあらかじめローカルに落としてから適用します。どうしてもネットワーク接続する場合グループポリシーからストアアプリの自動更新を無効化することもでき・・・たようなのですが、Windows 10 Version1903あたりからProfessionalでは設定しても機能しなくなったようなのでマスターを作る場合は完全にオフラインで作業した方が安全です。

まとめ

マスター本体自体は比較的すぐ(というか基本的に趣味でもやってきた“いつものOSインストール作業“とほぼ変わらない”)完成したのですが、回復パーティション周りの処理で偉く時間をとってしまったような気がします。そもそも以前は作ったマスターをTrueImageでバックアップしてそれを展開という形をとっていたのでDISMで色々やるのは多分Windows 8.1で回復パーティションを作成した時以来な気がします。最初はGUIフロントエンドに頼ろうと思ったのですがコマンド自体は好きだからなのかなんなのかわからないのですが割とすぐ覚えられました。期限などもありますし、マスターの段階で間違ってると後からとんでも無いことになるので慎重にやっていますが、やっぱりこういう仕事の方がかのあゆには合っているような気がします。毎日トライアンドエラーですがその辺も含め作業してて楽しいので・・・

コメント

タイトルとURLをコピーしました