RobocopyとPowershellを利用した世代管理バックアップ

バックアップをする時にバックアップ時点毎にデータを保持しておく”世代管理”という方法があります。ちょうど世代管理でバックアップを行いたいデータがあったので、いつも使っているRobocopyとPowershellを組み合わせてバックアップ用のスクリプトを作りました。

#Powershell
#コピー元コピー先の設定
$CopyFrom = [コピー元]
$CopyDest = [コピー先]

#コピー先のフォルダ数確認
#6フォルダ以上ある場合は古いものから削除
$FolderCount = (Get-ChildItem $CopyDest | Where-Object { $_.PsIsContainer }).Count

While($FolderCount -ge 6){
    #コピー先内のフォルダ一覧を昇順ソートして変数に格納
    $DltPass = Get-ChildItem $CopyDest | Where-Object { $_.PsIsContainer } | Sort-Object
    
    #最も古い日付のフォルダ削除
    Remove-Item -Path ($CopyDest +"\"+ $DltPass[0].Name) -Force

    $FolderCount = (Get-ChildItem $CopyDest | Where-Object { $_.PsIsContainer }).Count
}

#当日の年月日からコピー先フォルダを生成
New-Item ($CopyDest +"\"+ (Get-Date -Format "yyMMdd")) -ItemType Directory

#データコピー
Robocopy $CopyFrom ($CopyDest +"\"+ (Get-Date -Format "yyMMdd")) /S /R:5 /W:0 /LOG+:$CopyDest\log.txt

実行するとコピー先フォルダの下にyymmdd形式で命名されたフォルダができ、その下にデータがコピーされます。コピー先フォルダの下に6つ以上フォルダがある場合、フォルダ名で昇順ソートして先頭に来たフォルダを削除する仕組みです。

念のため、コピー先フォルダ直下にバックアップのログが残るようにしています。エラー処理等は一切していませんが、自分用ならとりあえずはこれで十分といったところです。

Robocopyは単体でも便利なのですが、Powershellから呼び出して使うこともできるので、アイデア次第では様々なやりたい事に対応できて便利です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スパム対策のため、日本語が含まれないコメントは投稿できません。