« 徹底比較!Arcserve UDP を使ったクラウドへのバックアップ方法 | トップページ | 在宅勤務をバックアップ! Arcserve UDP PC向け無償版提供 »

2020年4月14日 (火)

Arcserve UDP で PC のシャットダウン時にバックアップを行う方法

PC ではサーバと違って常時起動しているわけではないので、バックアップを行うタイミングが悩みどころです。バックアップ スケジュールを決めておいてもその時間に電源を落としていたらバックアップできません。(※1

逆に、起動とシャットダウンは毎日するので、そのタイミングでバックアップを行えば漏れがなさそうです。そこで、今日は PowerShell のスクリプトを作って、Windows PC のシャットダウン時(※2)にバックアップを実行させてみます。

01_shutdown_backup

(こういう事がやりたい)

 

■ 1:実行ポリシーの確認と変更

今日の記事ではバックアップ対象の PC で PowerShell の実行ポリシーが「RemoteSigned」になっている前提で進めていきます。スクリプトが実行できない場合は、前回の記事を参考に PC の実行ポリシーを確認/変更してください(※3)。

 

■ 2:バックアップを実行する PowerShell スクリプトを作る

という事で Arcserve UDP でバックアップを実行するスクリプトのサンプルを置いておきます。オレンジ色文字のパラメータは環境に合わせて適宜変更してください。これを ps1 ファイルとして保存します。

Shutdown_Backup.ps1

# あらかじめオプションの引数を指定しておく
$hostname = 'Localhost'
$Protocol = 'https'
$Port = '8014'
$User = 'administrator'
$PasswordFile ='C:\Password'
$JobType = 'Incr'
$ScheduleType = 'Daily'

# UDP PowerCLI のディレクトリに移動
cd 'C:\Program Files\Arcserve\Unified Data Protection\Engine\PowerCLI'

# バックアップを実行
.\UDPPowerCLI.ps1 -command Backup -UDPAgentServerName $hostname -UDPAgentProtocol $Protocol -UDPAgentPort $Port -UDPAgentUserName $User -UDPAgentPasswordFile $PasswordFile -backupJobType $JobType -backupScheduleType $ScheduleType

# 120秒待機
Start-Sleep -Seconds 120

 

バックアップ コマンドのオプションについては前回の記事をご覧ください。前回と違う点として、スクリプトの最後にバックアップが完了するまでの待機時間を設けています。とりあえず 120 秒にしていますが実環境で使う場合は適切な値に直してください。

今回は使っていませんが、ドメイン ユーザーで Arcserve UDP Windows Agent にログインさせるために、-UDPAgentDomainName オプションでドメイン名を指定することもできます。

 

■ 3:スクリプトをシャットダウン スクリプトとして登録する

ローカル グループ ポリシーでシャットダウン時にスクリプトを実行するという便利な機能があるので、今回はそれを使います。(※4

1) [ファイル名を指定して実行] で「gpedit.msc」と実行して、ローカル グループ ポリシー エディターを開きます。

2) [コンピューターの構成] - [Windows の設定] - [スクリプト(スタートアップ/シャットダウン)] の [シャットダウン] を開きます。

31_gpedit

 

3) [PowerShell スクリプト] タブを開いて、さっき作った「Shutdown_Backup.ps1」ファイルを追加します。以下のシャットダウン スクリプトのデフォルト パスに「Shutdown_Backup.ps1」を保存しておきます。

C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown

32_gpedit

 

■ 4:シャットダウン スクリプトの待機時間を調整

先ほどスクリプト中で待機時間を設定しましたが、ローカル グループ ポリシーの方でも待機時間が決まっており、デフォルトでは問答無用で 600 秒間(10分間)シャットダウンしないで待ってくれます。環境によっては 10 分は長すぎるでしょうし、逆に時間が足りないという事もあるかもしれません。これも変更してしまいましょう。

1) [管理用テンプレート] - [システム] - [スクリプト] の [グループ ポリシー スクリプトの最大待機時間を指定する] を開きます。

41_gpedit

 

2) [有効] を選択して最大待機時間を「0(無制限)」に指定します。どうせスクリプト中で待ち時間を指定しているので、ここで細かく指定する必要はありません。

42_gpedit

 

ここまでの設定を保存したら、ローカル グループ ポリシー エディターでの操作は終わりです。

 

■ 5:パスワード ファイルを SYSTEM アカウントで作成する

最後に、バックアップ実行時に Arcserve UDP Windows Agent にログインするユーザーのパスワード ファイルを作成します。このパスワード ファイルの作成操作は SYSTEM アカウントで行わなければいけません。(※5

素直にパスワード ファイルの作成コマンドを実行すると、その時ログインしているユーザーがパスワード ファイルを作ったことになってしまいます。そこで、パスワード ファイルの作成処理を PowerShell スクリプト化しておき、それをタスク スケジューラーで SYSTEM アカウントとして実行する、という回り道をします。

以下、パスワード ファイルを作成する PowerShell スクリプトと、そのスクリプトをタスク スケジューラーで実行する bat ファイルを作りました。タスク スケジューラーの操作は 1 行ずつコマンドを打ったり GUI でやっても良いのですが、多少なりとも省力化できればという事で……(※6)。

「Create_Pass.ps1」中の"xxxxxxxx"の箇所がパスワードです。Arcserve UDP Windows Agent にログインするユーザーのパスワードで置換して、ps1 ファイルとして保存してください。

Create_Pass.ps1

# Arcserve UDP Windows Agent にログインするユーザーのパスワードとパスワード ファイルの作成場所を指定
$Password = 'xxxxxxxx'
$PasswordFile = 'C:\Password'

# UDPPowerCLI ディレクトリに移動
cd 'C:\Program Files\Arcserve\Unified Data Protection\Engine\PowerCLI'

# パスワードを SecureString 型に変換
$SecurePassword = ConvertTo-SecureString $Password -AsPlainText -Force

# パスワード ファイルが既にあったら削除
$FileExist = Test-Path $PasswordFile
If($FileExist -eq 'True'){
    Remove-Item $PasswordFile
}

# パスワード ファイルを新しく作成
.\UDPPowerCLI.ps1 -command CreatePswFile -Password $SecurePassword -PasswordFile $PasswordFile

# このスクリプト ファイルを削除
Remove-Item $MyInvocation.InvocationName

 

Create_Task.bat

REM パスワード ファイルを作成するためのタスクを作成する
schtasks /create /TN UDP_Password /TR "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\Create_Pass.ps1" /SC ONCE /ST 00:00:00 /RU SYSTEM

REM タスクを実行
schtasks /run /TN UDP_Password

REM タスクを削除
schtasks /delete /TN UDP_Password /F

REM このバッチファイルを削除
del %0

 

この 2 つのファイルを PC の C ドライブ直下に置いて、Create_Task.bat を実行するとパスワード ファイルが作成されます。「Create_Pass.ps1」と「Create_Task.bat」は実行後に自分自身を削除するようにしています。

51_password_file

 

これで設定は完了です!PC をシャットダウン(または再起動)すると「Shutdown_Backup.ps1」が実行されてバックアップが始まるはず(※7)。

手元の PC ではバックアップ実行中のスクリーンショットが取れなかったので、証拠として再起動後のアクティビティ ログを置いておきます。

61_result

 

以上、ホテがお伝えしました。

<関連記事>

Arcserve UDP:Windows のバックアップを PowerShell から実行する方法

Arcserve UDP v6 新機能紹介 ~ (9) PowerShell を使ったバックアップ/リストアの自動実行 【前編】

Arcserve UDP v6 新機能紹介 ~ (10) PowerShell を使ったバックアップ/リストアの自動実行 【後編】


※1 対策の 1 つとして、Arcserve UDP にはバックアップを再試行する機能もあります。今日の記事で紹介している方法が面倒だったら、この運用の方が楽かもしれません。
Arcserve UDP : 上手くいかなかったバックアップを自動的にやり直してくれる - メークアップ ジョブ

※2 「起動時」より「シャットダウン時」にバックアップする方が需要が多そうなので題名もこっちにしました。「起動時」で実行したい場合はローカル グループ ポリシーで「スタートアップ」の方にスクリプトを登録すれば同じことができるはずです。

※3 Active Directory ドメイン環境であればグループ ポリシーでまとめて設定できるので、PC が多いときに便利です。

※4 これも、Active Directory ドメイン環境であれば(ローカルでない)グループ ポリシーでまとめて設定できます。

※5 SYSTEM アカウントはシャットダウン スクリプトの実行アカウントです。パスワード ファイルは DPAPI という API を使って暗号化されており、暗号化を行ったユーザーでなければデータを復号できない仕組みになっています。そのため、パスワード ファイルの暗号化を SYSTEM アカウントでやっておかないと、シャットダウン スクリプトの実行時に SYSTEM アカウントがパスワード ファイルを復号できず、その後の処理が進まなくなってしまいます。

※6 これも、グループ ポリシーであれば……(以下略)

※7 再起動したらスクリプトが動くのにシャットダウンだと動かない、という場合は PC の電源オプションを確認してください。[電源ボタンを押したときの動作] が「スリープ状態」や「休止状態」になっている可能性があります。あと、「高速スタートアップ」が有効になっていると、シャットダウンしてもスクリプトが実行されないので注意です(体験談)。

« 徹底比較!Arcserve UDP を使ったクラウドへのバックアップ方法 | トップページ | 在宅勤務をバックアップ! Arcserve UDP PC向け無償版提供 »

技術情報」カテゴリの記事

Arcserve UDP」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« 徹底比較!Arcserve UDP を使ったクラウドへのバックアップ方法 | トップページ | 在宅勤務をバックアップ! Arcserve UDP PC向け無償版提供 »