仕事で使うファイルや大切なデータは、定期的にバックアップしておくことが重要です。
しかし、毎日手作業でフォルダをコピーしていると、
「今日はバックアップするのを忘れた」
「最後にバックアップしたのはいつだっけ?」
ということもあります。
そこで便利なのが、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"
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
パソコンを使用する時間帯に合わせて設定してください。

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のタスクスケジューラを組み合わせれば、毎日行っているバックアップ作業を自動化できます。
今回の流れは次のとおりです。
- PowerShellでrobocopyを実行するスクリプトを作る
- 手動で正常にバックアップできることを確認する
- タスクスケジューラに登録する
- 毎日決まった時間に実行する
- ログを確認できるようにする
一度設定しておけば、毎回手作業でファイルをコピーする必要がありません。
まずはテスト用フォルダで試して、正常に動作することを確認してから実際のバックアップに利用してください。
PowerShellを使ったバックアップについて、さらに詳しく知りたい方はこちらの記事も参考にしてください。
【PowerShell】robocopyコマンドを使う方法

