PXE/PE起動後のバッチ

Top / PXE / PE起動後のバッチ

フロー

  1. PE起動後、PEイメージ内に格納されている[START.BAT]が実行される
    • [START.BAT]はPEイメージの作成時に編集できる。本システムでは手動で[run.bat]の呼び出し命令を追加している。詳細はPXE/PXEブート環境の構築で。
  2. [START.BAT]の最後で[run.bat]が実行される。
  3. [run.bat]から、選んだ操作に従って適宜他の[*.bat]が実行される。

run.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@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のシステムドライブで、メモリ上に展開されている。
    • [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] ユーザに文字列を入力させる。
      • その後、入力された文字によって処理を分岐させる。
  • [40-43] コマンド[wpeutil reboot]と[wpeutil shutdown]はWindows PEにもとから用意されている再起動とシャットダウン用の命令。
  • [58-62] サーバ選択を行うバッチの呼び出し
    • この時点でカレントディレクトリは[z:\boot]だけど、サーバ選択のバッチ内で[z:]のマウントを一度解除する(後述)するため、バッチを[z:]以外にコピーしてそこで実行する必要がある。

StartRecovery.bat

1
2
3
4
5
6
7
@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]以下のオプションは以下の通り。
      オプション意味
      moderestoreモードの指定。この場合はリストアする。
      srcz:\0921.ghoソースイメージの指定。
      dst1リカバリ先の物理ドライブの指定。パーティションではなく物理ドライブな点に注意。最初のローカルドライブの場合は1。

StartCreate.bat

1
2
3
4
5
6
7
@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

1
2
3
4
5
6
7
@echo off
x:
cd \ghost
ghost32.exe /setosdrives /blind >> x:\ghost\startlog.txt


start ghost32.exe

SelectServer.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
@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: 2011-10-12 (水) 20:17:38 (2474d)