もくじ
→https://qiita.com/tera1707/items/4fda73d86eded283ec4f
やりたいこと
Windows PEを使って、Windows10にログインせずに、アプリをインストールしたりアンインストールしたり、その他メンテナンスをしたい。
今回やったこと
下記のページを参考にさせていただき、自分のやったこと・試したことをまとめた。
https://qiita.com/SkyLaptor/items/204245cf6bb4fee5b19d
概要
実験環境
下記のPCを使用。
- Windows10 pro 1903(19H1)
- Windows ADK for Windows 10, version 1903
作業の流れ
ざっくり、こういう流れでWindowsPEから起動する準備作業をする。
今回は、WindowsPEで起動するところまでをやる。
インストールの仕方(dismコマンド等)はまた別途。
- 必要物のダウンロード・インストール
- WindowsADK
- WindowsPEアドオン
- WindowsPEメディアを作成
- 素のWindowsPEを作成し、マウントする
- mountフォルダの下に必要なフォルダ/ファイルを置く
- 起動時に実行されるstartnet.cmdを編集しインストール処理を追加
- mountフォルダに加えた変更をアンマウントしmediaフォルダに反映させる
- 起動可能なUSBメモリを作成する
- USBメモリにmediaフォルダの中身をコピーする
- USBから起動させる
- WindowsPE起動~メンテ作業を実施する
マウント・アンマウント
マウントとかアンマウントとかの言葉が出てくるが、イメージとしてはこんな感じに自分はしている。
※「mountフォルダ以下がCドライブになる」と図中で書いているが、今回試した限りでは、PE起動時のドライブは「X:」ドライブだった。
作業
必要物のダウンロード・インストール
ダウンロード、インストールについては、参考にさせていただいたサイトをほぼそのまま実施している。(ドライバ入れなかったりするのが自分がやったのと少しだけ違う)
困ったら、そちらを参照させていただくと良いと思うが、ざっくり下記のようにした。
WindowsADK
下記の「Download the Windows ADK for Windows 10, version 1903」リンクより落とす。
※ダウンロードしたexeを実行して出てくる画面で「インストールを行う機能を選択してください」画面が出たら、「Deployment Tools」のみチェックを入れる
WindowsPEアドオン
ADKと同じページの「Download the Windows PE add-on for the ADK」リンクより落とす。
※かなり時間かかるので注意。(今回試したときは4時間以上かかった)
WindowsPEメディアを作成
素のWindowsPEを作成し、マウントする
- まず、スタートメニューの[Windows Kits] > [展開及びイメージングツール環境]を、管理者権限で開く。
- 開いたら、下記のコマンドをすべて実行する。([展開及びイメージングツール環境]の黒窓に、改行も含めて全部コピーして貼り付ければ、実行してくれる)
rem 素のWindowsPEを準備する
set WS_DIR=C:\winpe
copype amd64 "%WS_DIR%"
rem マウントする
Dism /Mount-Image /Imagefile:"%WS_DIR%\media\sources\boot.wim" /Index:1 /Mountdir:"%WS_DIR%\mount"
rem --------------
rem 日本語化+αを組み込む
set ADK_PATH=C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit
set ADK_PACK=%ADK_PATH%\Windows Preinstallation Environment\amd64\WinPE_OCs
rem set WS_DIR=C:\winpe
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\lp.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-FontSupport-JA-JP.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-WMI.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\WinPE-WMI_ja-jp.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-NetFx.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\WinPE-NetFx_ja-jp.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-Scripting.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\WinPE-Scripting_ja-jp.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-PowerShell.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\WinPE-PowerShell_ja-jp.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-DismCmdlets.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\WinPE-DismCmdlets_ja-jp.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-SecureBootCmdlets.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-WDS-Tools.cab"
Dism /Image:"%WS_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\WinPE-WDS-Tools_ja-jp.cab"
Dism /Image:"%WS_DIR%\mount" /Enable-Feature /FeatureName:SMB1Protocol
Dism /Image:"%WS_DIR%\mount" /Set-Allintl:ja-jp
Dism /Image:"%WS_DIR%\mount" /Set-Inputlocale:0411:00000411
Dism /Image:"%WS_DIR%\mount" /Set-Layereddriver:6
Dism /Image:"%WS_DIR%\mount" /Set-Timezone:"Tokyo Standard Time"
※参考にさせていただいたサイトでは、「ドライバを入れる」という手順があるが、今回はインストールするためだけのPEなので、入れなかった。
- 作業用PCの
C:\winpe
に、fwfiles
、media
、mount
の3つのフォルダができていることを確認する。 -
mount
フォルダの中に、Program Files
、Program Files (x86)
、ProgramData
、Windows
、Users
の5つのフォルダができていることを確認する。
[展開及びイメージングツール環境]の黒窓は、一度開いたら本手順が終わるまで閉じないこと。閉じると、マウントしたイメージをアンマウントできなくなったりする。閉じてしまった場合は、こちらを参照。
mountフォルダの下に必要なフォルダ/ファイルを置く
'mount'フォルダの下に、実際にWindowsPEが起動したときに使いたいものを入れておく。図では、「myFolder」というフォルダを入れている。
アプリをインストールしたい場合などは、ここに.appxやインストールに必要なバッチファイルを入れておけばよい。
起動時に実行されるstartnet.cmdを編集しインストール処理を追加
WindowsPEが起動したら、C:\winpe\mount\Windows\System32
にあるstartnet.cmd
が自動的に実行される。必要に応じて、そこに処理を追加する。
※素の'startnet.cmd'は下記のようなもの。ここに、処理を追加するが、もとからあるwpeinitは消さないこと。(PEの初期化処理をしているらしい)
wpeinit
何かアプリを自動でインストールしたいようなときは、ここにインストール処理を追記するか、インストール用のバッチを呼ぶような記述を追記する。
今回試した時、なぜか「上書き禁止」になっていたので、別でstartnet.cmdを作成して、上書きして編集した。
mountフォルダに加えた変更をアンマウントしmediaフォルダに反映させる
mountフォルダの中に必要物を置いたら、下記のコマンドを[展開及びイメージングツール環境]に入れて、mountに加えた内容を反映させる。(=アンマウント)
set WS_DIR=C:\winpe
Dism /Unmount-Image /Mountdir:"%WS_DIR%\mount" /Commit
※アンマウントした後は、mountフォルダの中身は空になる。
USBメモリにmediaフォルダの中身をコピーする
アンマウント&コミットした内容を、USBメモリにコピーする。
下記のようなコマンドを使用して行う。
set WS_DIR=C:\winpe
rem FドライブがUSBメモリの時は、
rem makewinpemedia /ufd "%WS_DIR%" F:
makewinpemedia /ufd "%WS_DIR%" {USBメモリのドライブレター}:
(USBメモリにmediaフォルダの中身をコピーする(別解))
USBメモリを作成する際、上の「USBメモリにmediaフォルダの中身をコピーする」が正しい手順だと思うが、今回こっちの手順で作業していた。これでも動作はしていたので、どちらでも行けるっぽい。(ただ、上の本来のmakewinpemediaを使ったやり方を推奨)
- まず、使用するUSBメモリをfat32でフォーマットする。
- 次に、上でアンマウントして出来上がったメディアフォルダ
C:\winpe\media
の中のものをすべてUSBメモリにコピーする。これで、WindowsPE起動用USBの出来上がり。
USBから起動させる
USBメモリから起動するようBIOS設定(起動の優先順位設定)をする。(やり方はモノによると思うので、割愛)
その後、再起動。
WindowsPE起動~メンテ作業を実施する
USBから起動すると、WindowsPEが起動する。
上で変更したstartnet.cmdの内容にもよるが、通常は起動後コマンド入力できるように黒窓が起動しているので、ここでメンテナンスしたいことを実施する。
これで、WindowsPEの準備から起動までは完了。
作ったWindowsPEを直したいときは、下のようにする。
作成したWindowsPEを修正したいとき
最新の状態がmediaフォルダの中(=USBメモリの中身)に保存されているので、それをマウントして、編集して戻す、ということをする。具体的には下記を実施する。
- マウント実施(mediaフォルダの中身をmountフォルダに展開していじれるようにする)
- mountフォルダ内を編集(startnet.cmdを編集したり、必要なものを配置したりする)
- アンマウント&コミット を実施してmediaフォルダを作成しなおす
- できたmediaフォルダの中身をUSBメモリにコピーする
マウント、アンマウントする際には、[展開及びイメージングツール環境]に下記のコマンドを入力する。
set WS_DIR=C:\winpe
Dism /Mount-Image /Imagefile:"%WS_DIR%\media\sources\boot.wim" /Index:1 /Mountdir:"%WS_DIR%\mount"
set WS_DIR=C:\winpe
Dism /Unmount-Image /Mountdir:"%WS_DIR%\mount" /Commit
備考
ここでやったのは、WindowsPEが起動するまでの準備なので、やりたかったアプリのインストール等はまだできていない。
インストールなどを実現するには、アプリのappxなどをmountフォルダの中に保存し、インストール用のバッチを書いてインストール処理をPEで行う必要がある。
dismで行うインストールも試したところ、特にPEだからといって特殊なコマンドを使うということはなかったので、また別途まとめる。
参考
日本語版WindowsPEメディアを作成する方法
https://qiita.com/SkyLaptor/items/204245cf6bb4fee5b19d