日本語版WindowsPEメディアを作成する方法

![WindowsPE-Win11-21H2](https://img.shields.io/badge/WindowsPE-Win11--21H2-brightgreen)
WindowsADKがあればイメージ取得や展開にも使えるWindowsPEを作成できますが、何も考えず作ったものだと日本語に対応していなかったりドライバ不足でストレージやNICが見えなかったりと具合の良くない部分があります。
そこで、不具合を解消した日本語版のWindowsPEメディアの作成方法を紹介します。

## WindowsADKのインストール
WindowsADK入手先: 
https://developer.microsoft.com/ja-jp/windows/hardware/windows-assessment-deployment-kit
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/31376180-94bc-547c-45e1-0266c3626868.jpeg" width="50%">

上記サイトからダウンロードした`adksetup.exe`を起動して下さい。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/c9550ccf-8092-f538-c720-2b400a904800.jpeg" width="50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/16fbfe51-11e1-3761-1339-e414d16ee09f.jpeg" width="50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/50f52622-99f7-6155-0b13-44af3578ac92.jpeg" width="50%">
`Deployment Tools`は必ず選択して下さい。他は任意ですが、自分はなんとなく全て入れています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/2fa67737-7ba7-536a-6bf8-e2c5e85030b9.jpeg" width="50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/e7e46c7c-289a-e37b-cd38-18ad373431d4.jpeg" width="50%">

### WindowsPEアドオンのインストール
1809からなぜかADKからWindowsPEイメージがアドオンとして分離されたため、別途インストールを行う必要があります。
WindowsPEアドオン入手先: 
https://developer.microsoft.com/ja-jp/windows/hardware/windows-assessment-deployment-kit
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/31376180-94bc-547c-45e1-0266c3626868.jpeg" width="50%">

上記サイトからダウンロードした`adkwinpesetup.exe`を起動して下さい。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/f28fdc65-4aa7-8ef5-43ac-116a3689a654.jpeg" width="50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/02f95d7d-9eac-1124-9621-62fd741c5d17.jpeg" width="50%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/ea7b1232-5863-7cb8-66f7-e11c4565f000.jpeg" width="50%">
`Windows Preinstallation Environment (Windows PE)`は必ず選択して下さい。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/babfaabd-9f5b-01c6-a4da-c45d17a16a95.jpeg" width="50%">

## WindowsPEメディアを作成する
WindowsADKで必要な機能をきちんとインストールしていれば「展開およびイメージングツール環境」がインストールされているはずです。それを管理者権限で起動して以下のコマンドを実行して下さい。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/ab386332-1026-6b40-bdae-81d8d4bdf415.jpeg" width="28%">

```bat:展開およびイメージングツール環境
set WS_DIR=C:\winpe
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 WindowsPEベース準備
copype amd64 "%WS_DIR%"

rem WindowsPEのマウント
Dism /Mount-Image /Imagefile:"%WS_DIR%\media\sources\boot.wim" /Index:1 /Mountdir:"%WS_DIR%\mount"

rem 日本語化＋αで必要なパッケージ追加
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"

rem 機能の有効化
Dism /Image:"%WS_DIR%\mount" /Enable-Feature /FeatureName:SMB1Protocol
Dism /Image:"%WS_DIR%\mount" /Enable-Feature /FeatureName:TelnetClient
Dism /Image:"%WS_DIR%\mount" /Enable-Feature /FeatureName:TFTP

rem 日本語化
Dism /Image:"%WS_DIR%\mount" /Set-Allintl:ja-jp
Dism /Image:"%WS_DIR%\mount" /Set-Inputlocale:0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}
rem InputLocaleの値は諸説あり 参考: https://docs.microsoft.com/ja-JP/previous-versions/windows/it-pro/windows-8.1-and-8/hh825682(v=win.10)
Dism /Image:"%WS_DIR%\mount" /Set-Layereddriver:6

rem タイムゾーン設定
Dism /Image:"%WS_DIR%\mount" /Set-Timezone:"Tokyo Standard Time"

rem WindowsPEの変更適用とアンマウント
Dism /Unmount-Image /Mountdir:"%WS_DIR%\mount" /Commit

rem isoイメージ化
makewinpemedia /iso "%WS_DIR%" C:\winpe.iso
```

## 備考
### 「WindowsPEベース準備」について
~~copypeのオプションは、32bitマシン上での利用を想定しているなら`x86`、64bitマシン上での利用を想定しているなら`amd64`にする必要があります。今時のハードウェアで64bitに非対応のものはほぼ無いため、よほど古いハードウェアで使う予定でなければ64bitマシン向けに作ってしまって問題ないと思われます。~~
Windows11は32bitマシンをサポートしません。64bit非対応のマシンで利用したい場合はWindows10ベースのWindowsPEを作成して下さい。


### 「日本語化＋αで必要なパッケージ追加」について
`Add-Package` にて追加している各種パッケージの詳細は以下を参照して下さい。
https://docs.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/winpe-add-packages--optional-components-reference?view=windows-11

### WindowsPEにドライバを追加したい場合
稀にNICやストレージがWindowsPEでは認識できない場合があります。特にストレージは致命的で、イメージの操作自体ができません。
その場合は以下の手順にてWindowsPEにドライバを追加可能です。

```bat:展開およびイメージングツール環境
set WS_DIR=C:\winpe

rem WindowsPEのマウント
Dism /Mount-Image /Imagefile:"%WS_DIR%\media\sources\boot.wim" /Index:1 /Mountdir:"%WS_DIR%\mount"

rem ドライバ追加
rem INFファイル直接
Dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:{ドライバファイル(.inf)} /ForceUnsigned
rem 例: Dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:E:\Drivers\example.inf /ForceUnsigned
rem 指定ディレクトリ丸ごと
Dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:{ドライバファイル(.inf)フォルダ} /Recurse /ForceUnsigned
rem 例: Dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:E:\Drivers /Recurse /ForceUnsigned

rem WindowsPEの変更適用とアンマウント
Dism /Unmount-Image /Mountdir:"%WS_DIR%\mount" /Commit
```

なお、ストレージに関するドライバ不足がPEで起きる環境にて、Hyper-V等で作成したドライバが入っていないWindowsイメージを展開した場合にブルースクリーンが発生する場合があります。その場合は、該当PC上にドライバが入ったUSBメモリ等を接続した状態でWindowsPEを起動して、以下のコマンドで直接ドライバを投入することも可能です。投入後起動を確認できたら、ドライバは正式な手順で入れておいた方が良いかもしれません。

```bat:WindowsPE
Dism /Image:"C:\" /Add-Driver /Driver:{ドライバファイル(.inf)フォルダ} /Recurse /ForceUnsigned
rem 例: Dism /Image:"C:\" /Add-Driver /Driver:E:\Drivers /Recurse /ForceUnsigned
```

### ドライバの取り出し方について
以前はDoubleDriverというソフトを用いて取り出していましたが、OS標準でコマンドが用意されていました。展開作業を行う場合には、メーカープリインストール状態のOSにて以下のコマンドで取り出しておくといいと思います。

```bat:
Dism /Online /Export-Driver /Destination:{ドライバファイル出力先フォルダ}
rem 例: Dism /Online /Export-Driver /Destination:"C:\Drivers"
```


### イメージ化について
isoファイルとしてイメージ化する他、起動USBメモリを作成することも可能です。こちらのほうがCDを無駄にしなくて良いかもしれません。

```bat:展開およびイメージングツール環境
set WS_DIR=C:\winpe
makewinpemedia /ufd "%WS_DIR%" {USBメモリのドライブレター}:
rem 例: makewinpemedia /ufd "%WS_DIR%" F:
```

### アンマウントせずにイメージングツール環境を閉じてしまった場合
作業の途中で`/Unmount-Image`している箇所がありますが、これをしない状態でツール環境画面を閉じてしまうとマウントしっぱなしとなり、管理者であっても該当フォルダの操作が出来なくなってしまいます。
その際には、コマンドプロンプトで以下のコマンドを実行すると、マウント中のすべてのイメージを強制アンマウントできます。

```bat:展開およびイメージングツール環境
Dism /Cleanup-Wim
```

## 参考
https://msdn.microsoft.com/ja-jp/library/hh825071.aspx
https://msdn.microsoft.com/ja-jp/library/hh824926.aspx
https://technet.microsoft.com/ja-jp/library/dd744355(v=ws.10).aspx