PowerShellでバックアップを自動化する方法|タスクスケジューラで定期実行

PowerShell

仕事で使うファイルや大切なデータは、定期的にバックアップしておくことが重要です。
しかし、毎日手作業でフォルダをコピーしていると、
「今日はバックアップするのを忘れた」
「最後にバックアップしたのはいつだっけ?」
ということもあります。

そこで便利なのが、PowerShellとWindowsのタスクスケジューラを組み合わせてバックアップを自動化する方法です。

PowerShellでバックアップ用のスクリプトを作成し、タスクスケジューラに登録しておけば、毎日決まった時間に自動でバックアップできます。

この記事では、PowerShellを使ったバックアップスクリプトの作成から、タスクスケジューラへの登録方法まで、初心者向けに順番に解説します。

PowerShellについて基本から知りたい場合は、こちらの記事も参考にしてください。

PowerShellとは?何ができる?初心者向けにわかりやすく解説

今回作るバックアップの仕組み

今回は、次のようなバックアップを作成します。

C:\Work
     ↓
PowerShell + robocopy
     ↓
D:\Backup\Work

C:\Workフォルダの内容を、D:\Backup\Workへバックアップします。
さらにWindowsのタスクスケジューラを使って、
毎日20:00に自動バックアップ
するように設定します。
バックアップ処理にはWindows標準のrobocopyを使用します。

robocopyの基本的な使い方については、以下の記事で詳しく解説しています。

【PowerShell】robocopyコマンドを使う方法

PowerShellでバックアップスクリプトを作成する

まずはバックアップを実行するPowerShellスクリプトを作成します。
メモ帳やVisual Studio Codeなどを開いて、次のコードを入力します。

$Source = "C:\Work"
$Destination = "D:\Backup\Work"

robocopy $Source $Destination /E /R:2 /W:5
それぞれの意味を説明します。
$Sourceはバックアップ元です。
$Source = "C:\Work"

$Destinationはバックアップ先です。

$Destination = "D:\Backup\Work"
自分の環境に合わせて、この2か所を書き換えてください。
robocopyのオプションは次の意味です。
  • /E:空のフォルダを含め、サブフォルダもコピー
  • /R:2:コピーに失敗した場合の再試行を2回にする
  • /W:5:再試行するまで5秒待つ

robocopyの初期設定ではエラー時の再試行回数が多いため、バックアップ用途では/Rと/Wを指定しておくと扱いやすくなります。

PowerShellスクリプトを保存する

作成したコードをPowerShellスクリプトとして保存します。
今回は、

C:\Scripts\backup.ps1
という名前で保存します。
C:\Scriptsフォルダがない場合は、先に作成しておきましょう。
PowerShellのスクリプトファイルには、
.ps1
という拡張子を使用します。
メモ帳で保存する場合は、backup.ps1.txtにならないよう注意してください。

まずは手動でバックアップを実行する

タスクスケジューラへ登録する前に、必ず手動で正常に動作するか確認しておきましょう。PowerShellを起動して、次のように実行します。

& "C:\Scripts\backup.ps1"
処理が完了したら、
D:\Backup\Work
を開き、ファイルが正常にコピーされているか確認してください。いきなり大切なデータで試すのではなく、最初はテスト用フォルダを作って動作確認することをおすすめします。

タスクスケジューラを起動する

スクリプトが正常に動作したら、Windowsのタスクスケジューラへ登録します。
Windowsの検索ボックスに、

タスク スケジューラ
と入力して「タスク スケジューラ」を起動します。
画面右側にある、「基本タスクの作成」をクリックします。
タスクスケジューラ

バックアップ用のタスクを作成する

「基本タスクの作成」が表示されたら、タスクの名前を入力します。
例えば、

PowerShell自動バックアップ
とします。
「説明」には、
C:\WorkをD:\Backup\Workへバックアップ
などと入力しておくと、あとから何のタスクなのか分かりやすくなります。
タスクスケジューラ

バックアップするタイミングを設定する

次に「トリガー」を設定します。
「トリガー」タブを選択し、「新規」をクリックします。

タスクスケジューラ

今回は毎日バックアップするので、「毎日」を選択します。
続いて開始時刻を設定します。
例えば、

20:00
に設定すれば、毎日20時にバックアップが実行されます。
パソコンを使用する時間帯に合わせて設定してください。
タスクスケジューラ

PowerShellを実行するように設定する

「操作」タブを選択し、「新規」をクリックします。

タスクスケジューラ

「操作」では、「プログラムの開始」を選択します。
「プログラム/スクリプト」には、Windows PowerShellを利用する場合、次のように入力します。

powershell.exe
「引数の追加」には次のように入力します。
-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\backup.ps1"

-NoProfileはPowerShellのプロファイルを読み込まずに実行するための指定です。
-Fileの後ろには、先ほど作成したPowerShellスクリプトの場所を指定します。

タスクスケジューラ

ここまで設定したら「OK」をクリックします。

これでタスクの登録は完了です。

タスクスケジューラから手動でテストする

登録したら、指定時刻まで待つ必要はありません。
タスクスケジューラライブラリから、「PowerShell自動バックアップ」を探します。
右クリックして、「実行」を選択してください。

タスクスケジューラ

その後、バックアップ先のフォルダを確認します。
ファイルがコピーされていれば成功です。
タスクスケジューラの「前回の実行結果」も確認しておきましょう。

タスクスケジューラ

自動バックアップできない場合の確認ポイント

タスクスケジューラでは、手動実行では動くのに、自動実行すると動かない場合があります。その場合は、次の点を確認してください。

ファイルパスが間違っていないか

まず確認したいのが、PowerShellスクリプトの場所です。

C:\Scripts\backup.ps1
が実際に存在するか確認してください。
フォルダ名にスペースが含まれている場合は、パスを"で囲みます。

バックアップ先にアクセスできるか

外付けHDDやネットワークドライブをバックアップ先にしている場合は注意が必要です。
タスク実行時にドライブが接続されていなかったり、実行するユーザーにアクセス権限がなかったりすると、バックアップできません。

タスクを実行するユーザーを確認する

タスクスケジューラに登録したユーザーと、普段PowerShellを実行しているユーザーが異なる場合、アクセスできるフォルダなどが変わることがあります。
正常に実行できない場合は、タスクのプロパティから実行ユーザーも確認しましょう。

バックアップのログも保存しておくと便利

自動バックアップでは、「本当にバックアップできたのか」を後から確認できるようにしておくことも重要です。robocopyでは、実行結果をログファイルへ保存できます。
例えば、

robocopy $Source $Destination /E /R:2 /W:5 /LOG:"C:\Scripts\backup.log"
とすると、実行結果をbackup.logへ保存できます。
ただし毎回同じファイルへ保存すると管理しにくくなるため、実際の運用では日付付きのログファイルにする方法も便利です。
ログ保存についてはこちらの記事で詳しく解説しています。
PowerShellでrobocopyのログを保存する方法|/LOG・/LOG+の使い方

バックアップを削除と完全同期させる場合は注意

robocopyには、

/MIR
という便利なオプションがあります。バックアップ元とバックアップ先を同じ状態にできるため便利ですが、バックアップ元で削除したファイルがバックアップ先からも削除されます。そのため、単純なバックアップでは安易に/MIRを使用しない方が安全です。
特にPowerShellやrobocopyを初めて使う場合は、テスト用フォルダで動作を十分確認してから使用してください。

まとめ

PowerShellとWindowsのタスクスケジューラを組み合わせれば、毎日行っているバックアップ作業を自動化できます。
今回の流れは次のとおりです。

  1. PowerShellでrobocopyを実行するスクリプトを作る
  2. 手動で正常にバックアップできることを確認する
  3. タスクスケジューラに登録する
  4. 毎日決まった時間に実行する
  5. ログを確認できるようにする

一度設定しておけば、毎回手作業でファイルをコピーする必要がありません。
まずはテスト用フォルダで試して、正常に動作することを確認してから実際のバックアップに利用してください。

PowerShellを使ったバックアップについて、さらに詳しく知りたい方はこちらの記事も参考にしてください。

【PowerShell】robocopyコマンドを使う方法
タイトルとURLをコピーしました