PowerShellとタスクスケジューラで実現するファイルの自動バックアップ

PowerShell お役立情報
Haru

はじめに

そのバックアップ、「気合い」と「記憶力」に頼っていませんか?

「このプロジェクトフォルダだけは、毎日ちゃんとコピーしておこう」

そう心に決めても、忙しい業務に追われていると、ついうっかり忘れてしまうのが人間です。

手動でのバックアップは、手間がかかるだけでなく、ヒューマンエラーの温床にもなりかねません。

PCの故障や誤操作で重要なファイルを失ってしまう前に、”あなたが何もしなくてもPCが勝手にやってくれる”、そんな理想的な自動バックアップの仕組みをPowerShellで作ってみませんか?

この記事では、PowerShellスクリプトとWindows標準の「タスクスケジューラ」を組み合わせ、指定したフォルダを毎日決まった時間に自動でバックアップする方法を解説します。

※この記事は Windows11 に標準搭載されているWindows PowerShellで動作確認しています。

1. バックアップ用PowerShellスクリプトを作成する

まずは、バックアップを実行する心臓部となるPowerShellスクリプトを作成します。

以下のコードをメモ帳に貼り付け、auto_backup.ps1 のような分かりやすい名前で保存してください。

auto_backup.ps1
# (1) バックアップしたいフォルダのパスを指定する
$sourceFolder = "C:\Users\STSUSER\Desktop\日次バックアップ\バックアップ元"

# (2) バックアップを保存する先のフォルダパスを指定する
$destinationFolder = "C:\Users\STSUSER\Desktop\日次バックアップ\バックアップ先"

# --- ここから下は編集不要 ---

# バックアップ先フォルダに、今日の日付のフォルダを作成する
# (例: Backup_20251031)
$backupFolderName = "Backup_" + (Get-Date -Format "yyyyMMdd")
$backupPath = Join-Path -Path $destinationFolder -ChildPath $backupFolderName

# 実行ログ用のメッセージ
Write-Host "バックアップ処理を開始します。"
Write-Host "バックアップ元: $sourceFolder"
Write-Host "バックアップ先: $backupPath"

# バックアップ元フォルダが存在するかチェック
if (-not (Test-Path -Path $sourceFolder)) {
    Write-Error "エラー: バックアップ元フォルダ '$sourceFolder' が見つかりません。"
    # スクリプトを異常終了させる(タスクスケジューラで失敗と判断される)
    exit 1
}

# バックアップ先フォルダが存在しなければ作成する
if (-not (Test-Path -Path $destinationFolder)) {
    New-Item -ItemType Directory -Path $destinationFolder
    Write-Host "バックアップ先フォルダ '$destinationFolder' を作成しました。" -ForegroundColor Yellow
}

# バックアップ元フォルダを、日付フォルダの中に丸ごとコピーする
try {
    Copy-Item -Path $sourceFolder -Destination $backupPath -Recurse -Force -ErrorAction Stop
    Write-Host "バックアップが正常に完了しました。" -ForegroundColor Green
}
catch {
    Write-Error "エラー: バックアップ中に問題が発生しました。 詳細: $($_.Exception.Message)"
    exit 1
}

# (応用) 30日以上前の古いバックアップを自動で削除する
$cleanupDate = (Get-Date).AddDays(-30)
Get-ChildItem -Path $destinationFolder -Directory -Filter "Backup_*" | Where-Object { $_.CreationTime -lt $cleanupDate } | ForEach-Object {
    Write-Host "$($_.Name) は30日以上経過したため削除します。" -ForegroundColor Magenta
    Remove-Item -Path $_.FullName -Recurse -Force
}

Write-Host "処理が終了しました。"

コード内のコメント(1)と(2)を、あなたの環境に合わせて書き換えるだけでOKです!

このスクリプトは、バックアップ先にBackup_20251031のような日付フォルダを作り、その中にファイルをコピーします。これにより、いつのバックアップかが一目でわかるようになります(世代管理)

さらに応用として、30日以上経過した古いバックアップフォルダを自動で削除する処理も入れているので、ストレージの圧迫を防ぐことが出来ます。

※自動削除機能が必要ない場合は、該当箇所のソースコードをコメントアウトするか、削除してください。

2. タスクスケジューラでスクリプトを自動実行する

スクリプトが完成したら、次はこのスクリプトを毎日決まった時間に自動で実行するよう、Windowsの「タスクスケジューラ」に登録します。

①タスクスケジューラを開く

スタートボタンを右クリックし、「コンピューターの管理」を選択します。左側のメニューから「タスク スケジューラ」を選択します。

(または、Win + Rキーで「ファイル名を指定して実行」を開き、taskschd.mscと入力してEnterでもOKです)

 

②基本タスクの作成

右側の操作メニューから「基本タスクの作成」をクリックします。

 

③名前と説明の設定

「名前」に「日次ファイルバックアップ」など、わかりやすい名前を入力して「次へ」をクリックします。

 

④トリガーの設定(実行タイミング)

「毎日」を選択して「次へ」をクリックします。

 

⑤毎日の設定

バックアップを実行したい時刻(例: 業務終了後の18:00)を設定し、「次へ」をクリックします。

 

⑥操作の設定

「プログラムの開始」を選択して「次へ」をクリックします。

 

⑦プログラムの開始(最重要ポイント)

以下の通り設定します。

プログラム/スクリプト: powershell.exe

引数の追加 (オプション): -ExecutionPolicy Bypass -File “C:\Users\STSUSER\Desktop\”

※ “C:\Users\STSUSER\Desktop\” の部分は、先ほど作成したps1ファイルの実際のパスに書き換えてください。

(例: “C:\Users\STSUSER\Desktop\日次バックアップ”)

 

⑧完了

設定内容の要約が表示されるので、問題がなければ「完了」をクリックします。

以上で設定は完了です。

これでもう、あなたのPCが毎日欠かさずバックアップを実行してくれます!

まとめ

手作業によるバックアップは、手間がかかる上に忘れるリスクも伴います。

しかし、PowerShellスクリプトとタスクスケジューラを一度設定してしまえば、あとは完全に自動化できます。

「面倒な繰り返し作業は、PCに任せる」

この考えをPowerShellは叶えることが出来ます。

この記事をきっかけに、あなたの”うっかり”を一つでも減らすことができれば幸いです。

お問い合わせはこちら

記事を書いた人

Haru

BI事業部所属。にんじんだいすきです!

関連記事

TOP