2006年06月22日

バックアップ多重化・実装(02)

前々回の「バックアップ多重化・構想」、前回の「バックアップ多重化・実装(01)」の続きです。

今回はA機側のプログラム・バッチです。B機からのバックアップを受け入れ、自身(A機)のバックアップの取得の後、電源オフのタイミングを計るように設計した。

【バックアップを取得する時に動かすバッチ内容】
D:\Backup\APCBackup-01.vbs
D:\Backup\APCBackup-03.vbs
【ここまで】

【呼ばれるAPCBackup-01.vbsのSource】
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'FileSystem
If objFSO.FileExists("F:\B-PC\Status\NotGetBackup.txt") then
objFSO.DeleteFile "F:\B-PC\Status\NotGetBackup.txt"
end if
'以前Backupの取得を指示しなかった時のIndicatorの削除
If objFSO.FileExists("F:\B-PC\Status\GetBackup.txt") then
objFSO.DeleteFile "F:\B-PC\Status\GetBackup.txt"
end if
'以前Backupの取得を指示した時のIndicatorの削除
If objFSO.FileExists("F:\B-PC\Status\Under15GB.txt") then
objFSO.DeleteFile "F:\B-PC\Status\Under15GB.txt"
end if
'HDDの残容量が15GBより少ない注意を出したときのIndicatorの削除
Do
pro = "選択してください" & chr(13) & "1:B-PCでバックアップを実行" & chr(13) & "9:B-PCでバックアップしない"
inputvalue = inputbox(pro)
if inputvalue = 1 then
objFSO.CopyFile "F:\A-PC\Constant\GetBackup.txt","F:\B-PC\Status\GetBackup.txt"
Exit do
else
if inputvalue = 9 then
objFSO.CopyFile "F:\A-PC\Constant\NotGetBackup.txt","F:\B-PC\Status\NotGetBackup.txt"
Exit do
end if
end if
loop

Set objDrive = objFSO.GetDrive("F")
'Drive情報取得
intdspGB = round(objDrive.AvailableSpace /(1024^3))
'残りスペースをGBに変換
if intdspGB < 15 then
WScript.Echo "使用可能スペースが " & intdspGB & "GB しかありません。大丈夫ですか?"
objFSO.Copyfile "F:\A-PC\Constant\Under15GB.txt","F:\B-PC\Status\Under15GB.txt"
end if

WhatWeekDay = WeekDay(Date)
Set objWShell = Wscript.CreateObject("WScript.Shell")
Set objEnv = objWShell.Environment("SYSTEM")
objEnv.Item("weekday") = WhatWeekDay
'環境変数weekdayに曜日の数字を設定 1=日曜日

Set objShell = Wscript.CreateObject("Wscript.Shell")
'Command Shell
Set objExec = objShell.Exec("D:\Backup\APCBackup-02.bat")
'Excecute Batch File
Do While objExec.Status = 0
Wscript.Sleep 180000
loop
【ここまで】

【APCBackup-01.vbsから呼ばれるAPCBackup-02.batの内容】
if %weekday%==1 set week=Sun
if %weekday%==2 set week=Mon
if %weekday%==3 set week=Tue
if %weekday%==4 set week=Wed
if %weekday%==5 set week=Thu
if %weekday%==6 set week=Fri
if %weekday%==7 set week=Sat

echo %week%

"D:\Backup\DriveImageXML\dixml.exe" /bC /t"F:\%week%\C-Drive\Drive_C" /s /v
"D:\Backup\DriveImageXML\dixml.exe" /bD /t"F:\%week%\D-Drive\Drive_D" /s /v
"D:\Backup\DriveImageXML\dixml.exe" /bE /t"F:\%week%\E-Drive\Drive_E" /s /v
【ここまで】

【呼ばれるAPCBackup-03.vbsのSource】
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'File System
Do
If objFSO.FileExists("F:\B-PC\Status\NotGetBackup.txt") then
Exit Do
End If
If objFSO.FileExists("F:\B-PC\Status\BackComp.txt") then
objFSO.DeleteFile "F:\B-PC\Status\BackComp.txt"
Exit Do
End if
Wscript.Sleep 300000
loop

Set objWShell = WScript.CreateObject("WScript.Shell")
'Command Shell
Set objExec = objWShell.Exec("D:\Backup\Poweroff.bat")
Do While objExec.Status = 0
Wscript.Sleep 15000
Loop
【ここまで】

【APCBackup-03.vbsから呼ばれるPoweroff.bat】
c:\Windows\system32\shutdown -s -f -t 30
【ここまで】

【APCBackup-01.vbsの解説】
まずは初期設定(HouseKeeping)で、以前のバックアップ時にCopyして状態を表すFileを削除。

電源オフのタイミングを計るため、B-PCのバックアップを取得するか・したかを問い合わせる。「1」でバックアップを取得する。「9」でバックアップを取得しない。それに応じて「GetBackup.txt」か「NotGetBackup.txt」をフォルダStatusにコピーする(置く)。

バックアップを取得するDriveの残容量を調べて15GB以下なら注意を表示し、「Under15GB.txt」をStatusにコピーする(置く)。

曜日を取得して、その数字を環境変数「weekday」に設定する。

Execメソッドを使用してバックアップを取得する。バックアップを取得するまでバッチの終了を待つ。

【APCBackup-02.batの解説】
環境変数「weekday」によりバックアップを取得するフォルダを変更する。

「DriveImage XML」を使用してバックアップを取得する。

【APCBackup-03.vbsの解説】
B-PCのバックアップを取得しない「NotGetBackup.txt」がある場合には、電源オフを実行する。

B-PCのバックアップを取得する「GetBackup.txt」がある場合には、B-PCのバックアップ取得終了を示す「BackComp.txt」があるかを確認し、あれば電源オフする。無ければ置かれるまでLoop状態で待つ。

「Poweroff.bat」で電源オフする。


https://www.ktservices3.com/

投稿者 owner : 2006年06月22日