Windows PE で 7-Zip File Manager を使う

# 目標

- 起動できないデバイスのデータをサルベージするために、USB メモリから起動する Windows PE を作成する。
- GUI でファイル操作をするために、ファイルマネージャーとして、7-Zip File Manager を使う。
- USB メモリに、WinPE とサルベージデータ保存用に 2 つのパーティションを作成する。
- WinPE 用の既定のドライブ フォーマットである FAT32 の最大ファイル サイズは 4GB、最大パーティション サイズは 32GB なので、データ リカバリー用は NTFS でフォーマットする。

# 準備

## 1. Windows アセスメント & デプロイメント キット (ADK) と WinPE アドオンのインストール

### (1) Windows ADK と WinPE アドオンをダウンロードする。

- 次から、Windows のバージョンに合わせた ADK と WinPE アドオンの 2 個をダウンロードする。
- テクニシャンPC は、Windows 10 21H2 64bit を使用するので、Windows 10 バージョン 2004 をダウンロードした。
- 他のバージョンでは、インストール中のメニューの表現が異なる場合がある。

https://learn.microsoft.com/ja-jp/windows-hardware/get-started/adk-install


### (2) Windows ADK をインストールする。

- adksetup.exe を起動する。
- 「場所の指定」では、「このコンピュータにWindows アセスメント & デプロイメント キットをインストールします」を選択する。「インストール パス」はそのままで。
- 「Windows キット プライバシー」の「Windows 10 キットの匿名の使用状況データを Microsoft に送信しますか?」は、「いいえ」でよい。
- 「インストールを行う機能を選択してください」では、「Deployment Tools」は必ず選択する。他は選択しなくても WinPE は作成できる。

### (3) WindowsPEアドオンをインストールする。

- adkwinpesetup.exeを起動する。
- 「Specify Location」では、「Install the Windows アセスメント & デプロイメント キット Windows Preinstallation Environment アドオン - Windows 10 to this computer」を選択する。
- 「Windows Kits Privacy」の「Send anonymous usage data to Microsoft for the Windows 10 Kits?」は、「No」のままでよい。
- 「Select the features you want to install」では、「Windows Preinstallation Environment(Windows PE)」は必ず選択する。

## 2. 7-Zip のインストール

- 次から 7-Zip（64-bit x64）をダウンロードし、インストールする。「Destination folder」はそのままで。

https://www.7-zip.org/

# USB メモリから起動する日本語化した WinPE の作成

- 次のコードでバッチファイルを作り、USB メモリを挿してから実行する。
- テクニシャンPC が 32bit Windows ならば、PATH を適宜変更する。
- PowerShell や Driver をインストールする場合、size=512 は作成する WinPE のサイズに合わせて変更する。
- USB メモリのフォーマットに失敗するときがあるが、もう一度実行するとうまくいった。

```make_winpe.bat
@echo off

rem ----- 管理者でなければ管理者として実行 -----
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
  @powershell start-process %~0 -verb runas
  exit
)

setlocal

echo ----- USBメモリのフォーマット -----
set DISKPART_TXT=%TEMP%\diskpart.txt

echo list disk > %DISKPART_TXT%
diskpart /s %DISKPART_TXT%

echo;
set /P NUM_DRIVE="USBディスクのディスク番号を数値で入力してください。: "
echo;
set /P STR_INPUT="ディスク %NUM_DRIVE%  にパーティションを作成します。よろしいですか？（Y/N）: "
IF /I not "%STR_INPUT%" == "Y" (
    echo;
    echo "終了します"
    echo;
    pause
    exit
)

echo select disk %NUM_DRIVE% > %DISKPART_TXT%
echo clean >> %DISKPART_TXT%
echo create partition primary size=512 >> %DISKPART_TXT%
echo active >> %DISKPART_TXT%
echo format fs=FAT32 quick label="WinPE" >> %DISKPART_TXT%
echo assign letter=P >> %DISKPART_TXT%
echo create partition primary >> %DISKPART_TXT%
echo format fs=NTFS quick label="USB_B" >> %DISKPART_TXT%
echo assign letter=Q >> %DISKPART_TXT%
echo Exit >> %DISKPART_TXT%
diskpart /s %DISKPART_TXT%

del %DISKPART_TXT%

if not exist P:\ (
    echo フォーマットに失敗しました。もう一度実行してみてください。
    pause
    exit
) 

echo;
echo ----- 7-Zip 環境の設定 -----
set MYAPPS_DIR=Q:\.MyApps
mkdir %MYAPPS_DIR%

set SETENV_BAT=%MYAPPS_DIR%\setenv.bat

echo @echo off > %SETENV_BAT%
echo set PATH=%%~dp07-Zip;%%PATH%% >> %SETENV_BAT%
echo 7zFM.exe >> %SETENV_BAT%
echo;
xcopy "C:\Program Files\7-Zip\" %MYAPPS_DIR%\7-Zip\
xcopy "C:\Program Files\7-Zip\Lang\ja.*" %MYAPPS_DIR%\7-Zip\Lang\ja.*

echo;
echo ----- WinPE USB の作成 -----
set WINPE_DIR=C:\WinPE_amd64
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

call "%ADK_PATH%\Deployment Tools\DandISetEnv.bat"

if not exist "%WINPE_DIR%" (
    echo;
    echo 作業ファイルの作成
    copype amd64 "%WINPE_DIR%"
)
echo;
echo ----- Windows PE ブート イメージをマウント -----
Dism /Mount-Image /Imagefile:"%WINPE_DIR%\media\sources\boot.wim" /Index:1 /Mountdir:"%WINPE_DIR%\mount"
echo;
echo ----- 日本語ランゲージパック -----
Dism /Image:"%WINPE_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\ja-jp\lp.cab"
echo;
echo ----- フォントパック -----
Dism /Image:"%WINPE_DIR%\mount" /Add-Package /Packagepath:"%ADK_PACK%\WinPE-FontSupport-JA-JP.cab"
echo;
echo ----- デフォルトのUI言語 -----
Dism /Image:"%WINPE_DIR%\mount" /Set-Allintl:ja-jp
echo;
echo ----- インプットロケール -----
Dism /Image:"%WINPE_DIR%\mount" /Set-Inputlocale:0411:00000411
echo;
echo ----- キーボードドライバ (106/109 キーボード) -----
Dism /Image:"%WINPE_DIR%\mount" /Set-Layereddriver:6
echo;
echo ----- タイムゾーン -----
Dism /Image:"%WINPE_DIR%\mount" /Set-Timezone:"Tokyo Standard Time"
echo;
echo ----- startnet.cmd の設定 -----
set STARTNET_CMD=%WINPE_DIR%\mount\Windows\System32\startnet.cmd

echo @echo off > %STARTNET_CMD%
echo wpeinit >> %STARTNET_CMD%
echo powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c >> %STARTNET_CMD%
echo setlocal >> %STARTNET_CMD%
echo set C2Z=CDEFGHIJKLMNOPQRSTUVWXYZ >> %STARTNET_CMD%
echo set /a i=0 >> %STARTNET_CMD%
echo :StartFor >> %STARTNET_CMD%
echo if %%i%% leq 23 (goto IfThen) else goto EndFor >> %STARTNET_CMD%
echo :IfThen >> %STARTNET_CMD%
echo call set DRV=%%%%C2Z:~%%i%%,1%%%%>> %STARTNET_CMD%
echo if exist %%DRV%%:\.MyApps\setenv.bat ( >> %STARTNET_CMD%
echo     %%DRV%%:\.MyApps\setenv.bat >> %STARTNET_CMD%
echo     goto BreakFor >> %STARTNET_CMD%
echo ) >> %STARTNET_CMD%
echo set /a i+=1 >> %STARTNET_CMD%
echo goto StartFor >> %STARTNET_CMD%
echo :BreakFor >> %STARTNET_CMD%
echo :EndFor >> %STARTNET_CMD%
echo endlocal >> %STARTNET_CMD%

echo;
echo ----- イメージの最適化 -----
dism /image:"%WINPE_DIR%\mount" /cleanup-image /startcomponentcleanup
echo;
echo ----- イメージを保存してマウントを解除 -----
dism /unmount-image /mountdir:"%WINPE_DIR%\mount" /commit
echo;
echo ----- Windows PE USB の作成 -----
echo;
MakeWinPEMedia /UFD "%WINPE_DIR%" P:

endlocal

pause

```