PXE/PE起動後のバッチ
フロー†
- PE起動後、PEイメージ内に格納されている[START.BAT]が実行される
- [START.BAT]はPEイメージの作成時に編集できる。本システムでは手動で[run.bat]の呼び出し命令を追加している。詳細はPXE/PXEブート環境の構築で。
- [START.BAT]の最後で[run.bat]が実行される。
- [run.bat]から、選んだ操作に従って適宜他の[*.bat]が実行される。
run.bat†
@echo off
goto :Start
:Start
set CONNECTEDSERVER=
net use >x:\NetUse.txt
for /f "tokens=3" %%i in ('find "IMAGES" x:\NetUse.txt') do @set CONNECTEDSERVER=%%i
set CONNECTEDSERVER=%CONNECTEDSERVER:~2,-7%
echo.
echo. ===============================================================
echo. HOGE FUGA PIYO PXE RECOVERY WIZARD
echo. ---------------------------------------------------------------
echo. Connected : %CONNECTEDSERVER%
echo. Press [ENTER] to start recovery from %CONNECTEDSERVER%...
echo.
echo. press [C] to Create an image on %CONNECTEDSERVER%
echo. press [G] to run Ghost with no command-line options
echo. press [S] to Select a server to operate
echo.
echo. press [Q] to Quit, [R] to Reboot, [H] to Shutdown
echo.
echo. ============================================== [ver.20100922] =
echo.
:ReadyToInput
set INPUT=
set /p INPUT=">"
if "%INPUT%" EQU "" goto StartRecovery
if "%INPUT%" EQU "C" goto StartCreate
if "%INPUT%" EQU "c" goto StartCreate
if "%INPUT%" EQU "G" goto StartGhost
if "%INPUT%" EQU "g" goto StartGhost
if "%INPUT%" EQU "S" goto SelectServer
if "%INPUT%" EQU "s" goto SelectServer
if "%INPUT%" EQU "Q" goto Quit
if "%INPUT%" EQU "q" goto Quit
if "%INPUT%" EQU "R" wpeutil reboot
if "%INPUT%" EQU "r" wpeutil reboot
if "%INPUT%" EQU "H" wpeutil shutdown
if "%INPUT%" EQU "h" wpeutil shutdown
goto Error
:StartRecovery
call StartRecovery.bat
goto Exit
:StartCreate
call StartCreate.bat
goto Exit
:StartGhost
call StartGhost.bat
goto Exit
:SelectServer
copy SelectServer.bat x:\SelectServer.bat >nul
call x:\SelectServer.bat
z:
goto Start
:Quit
goto :EOF
:Error
echo Invalid input.
goto ReadyToInput
:Exit
call run.bat
- [6-9] 接続しているサーバ名を変数に格納する部分
- [6] 変数の用意と初期化
- [8] コマンド[net use]の結果を[x:\NetUse.txt]に出力する。
- [net use]は共有ディレクトリのマウント情報を表示するもの。この時点で、例えばサーバHOGEの場合は以下のテキストファイルが出力される。
(略) ---------------------------------------------------- OK Z: \\HOGE\IMAGES Microsoft Windows Network (略)
- [x:]はPEのシステムドライブで、メモリ上に展開されている。
- [net use]は共有ディレクトリのマウント情報を表示するもの。この時点で、例えばサーバHOGEの場合は以下のテキストファイルが出力される。
- [8] [x:\NetUse.txt]の"IMAGES"が含まれる行の3文節目を変数[CONNECTEDSERVER]に格納する。
- 3文節目という指定は"tokens=3"で行う。文節はデフォルトではスペースで判断されるので、今回の場合3文節目は[\\HOGE\IMAGES]を指す。
- この時点で変数[CONNECTEDSERVER]には[\\HOGE\IMAGES]が格納されている。
- [9] 変数[CONNECTEDSERVER]からサーバ名だけを切り出して格納し直す。
- %変数名:~2,-7%は、[2文字目より後ろから、後ろから7文字目より前まで]、の意味。つまり頭の[\\]の後ろから、後ろの[\IMAGES]の前までのことで、すなわち[HOGE]を指す。
- [27-44] 入力と分岐
- [29] ユーザに文字列を入力させる。
- その後、入力された文字によって処理を分岐させる。
- [29] ユーザに文字列を入力させる。
- [40-43] コマンド[wpeutil reboot]と[wpeutil shutdown]はWindows PEにもとから用意されている再起動とシャットダウン用の命令。
- [58-62] サーバ選択を行うバッチの呼び出し
- この時点でカレントディレクトリは[z:\boot]だけど、サーバ選択のバッチ内で[z:]のマウントを一度解除する(後述)するため、バッチを[z:]以外にコピーしてそこで実行する必要がある。
StartRecovery.bat†
@echo off x: cd \ghost ghost32.exe /setosdrives /blind >> x:\ghost\startlog.txt start ghost32.exe -batch -rb -clone,mode=restore,src=z:\0921.gho,dst=1
- [4] この命令の効果がよくわからないんだけど、編集前の[START.BAT]ではGhost実行前にこれが書かれていたので書いておいた。
- [7] リカバリを自動で開始する命令。
オプション 意味 -batch バッチモードで実行。ユーザ確認を伴う中断を行わないようにする。 -rb 処理の完了後に確認画面を出さず自動的にコンピュータをリブートする。 -clone クローンモードで実行。 - [-clone]以下のオプションは以下の通り。
オプション 値 意味 mode restore モードの指定。この場合はリストアする。 src z:\0921.gho ソースイメージの指定。 dst 1 リカバリ先の物理ドライブの指定。パーティションではなく物理ドライブな点に注意。最初のローカルドライブの場合は1。
- [-clone]以下のオプションは以下の通り。
StartCreate.bat†
@echo off x: cd \ghost ghost32.exe /setosdrives /blind >> x:\ghost\startlog.txt start ghost32.exe -span -auto -ib -z2 -or
- [7] イメージ作成に必要なオプション設定を起動引数でつける。GUIからオプションを変更する手間を省いている。
オプション 意味 -span イメージファイルの分割を有効にする -auto 分割イメージのファイル名を自動的に設定する -ib ブートトラック内の情報もイメージに含める -z2 イメージの圧縮率を1(低圧縮率)から9(高圧縮率)で設定。GUIの[HIGH]が[2]なのでここではそうした。[9]は時間がかかる割に500MB程度しか容量が削減されなかったのでたぶん2で問題ない。 -or イメージ作成元ドライブのサイズがイメージ作成先ドライブのサイズより大きいとエラーが出ることがあるので、そのような整合性検査を強制的にクリアするためのもの、みたいなかんじらしい。よくわかっていないけどとりあえずつけておく。
StartGhost.bat†
@echo off x: cd \ghost ghost32.exe /setosdrives /blind >> x:\ghost\startlog.txt start ghost32.exe
SelectServer.bat†
@echo off
goto :Start
:Start
set CONNECTEDSERVER=
net use >x:\NetUse.txt
for /f "tokens=3" %%i in ('find "IMAGES" x:\NetUse.txt') do @set CONNECTEDSERVER=%%i
set CONNECTEDSERVER=%CONNECTEDSERVER:~2,-7%
echo.
echo. ===============================================================
echo. HOGE FUGA PIYO PXE RECOVERY WIZARD
echo. ---------------------------------------------------------------
echo. Connected : %CONNECTEDSERVER%
echo. Select a server you want to connect...
echo.
echo. [1] HOGE
echo. [2] FUGA
echo. [3] PIYO
echo.
echo. press [Q] to Quit
echo.
echo. ============================================== [ver.20100922] =
echo.
:ReadyToInput
set SERVER=
set INPUT=
set /p INPUT=">"
if "%INPUT%" EQU "1" (
set SERVER=HOGE
goto Mount
)
if "%INPUT%" EQU "2" (
set SERVER=FUGA
goto Mount
)
if "%INPUT%" EQU "3" (
set SERVER=PIYO
goto Mount
)
if "%INPUT%" EQU "Q" goto Quit
if "%INPUT%" EQU "q" goto Quit
goto Error
:Mount
echo Connect to %SERVER%...
x:
net use z: /delete /y
net use z: \\%SERVER%\IMAGES /user:Administrator [パスワード]
z:
goto Exit
:Quit
goto :EOF
:Error
echo Invalid input.
goto ReadyToInput
:Exit
- [48-54] 指定したサーバを[z:]にマウントする
- [50] [z:]をアンマウントするので、[x:]に移動しておく
- [51] アンマウントする
- [52] マウントする。ユーザ名とパスワードは必須
Last-modified: 2026-05-10 (日) 23:15:07