🦾

[PowerShell]コピーバックアップ&ローテーションの方法 - Local to NAS

2023/03/30に公開

概要

こちらの記事で文字だけを表示するスクリプトを使い、
PowerShellのはじめ方を紹介しましたが、より実践に近いサンプルコード(サンプルプログラム)を作成しました。

今回作成したPowerShellスクリプトはWindows共有フォルダー(NASやパソコンなど)をバックアップ先(コピー先)としたデータのコピーバックアップや、
あらかじめ設定した世代数でのバックアップローテーションを実施するという内容です。

PowerShellの始め方(スタートアップ)としても、ご参考頂ければと思います。
https://haretokidoki-blog.com/pasocon_powershell-startup/

この記事のターゲット

  • PowerShellユーザーの方
  • PowerShellでコピーバックアップ(ローテーション含む)のスクリプトを作成したい方
  • 初心者でPowerShellスクリプト作成の参考にしたい方

サンプルプログラムの紹介

サンプルプログラムのシナリオは、ジョブスケジューラに登録し定期的(毎日夜間など)にデータのコピーバックアップの取得とバックアップのローテーションを実行するという、シナリオを想定したツール。

サンプルプログラム

https://github.com/akiGAMEBOY/PowerShell_FileCopybackupTool

仕様

プログラム起動用:batファイルとプログラムの本体:ps1ファイル、個別の設定ファイル:setup.iniファイル、
の3つで構成されたプログラム。

なお、共有フォルダーに接続する為の下記情報は設定ファイルにより変更可能とする。

  1. ホスト名、またはIPアドレス
  2. ユーザー名
  3. パスワード[1]
  4. バックアップ先のパス(コピー先)
  5. 世代数
  6. バックアップ対象(コピー元)

フローチャート

処理全体

ファイル名:FileCopybackupTool.bat

プログラム本体

ファイル名:Main.ps1

画面仕様

バッチファイル(batファイル)を使いPowerShellスクリプトを実行する。
このPowerShellでは.NET Frameworkのフォーム(以下、dotNETフォームと称する)を呼び出して使用しており、
dotNETフォームを使ったポップアップウィンドウで操作する。
他にコマンドプロンプトが一時停止(PUASE)状態の確認画面の際に「Enterキー」を押し、処理続行させる操作方法も含まれる。
https://learn.microsoft.com/ja-jp/powershell/scripting/samples/creating-a-custom-input-box?view=powershell-7.3

機能仕様

  1. 引数チェック
    • 引数の有無
    • 引数の値
      バックアップローテーションの場合は引数がRotatiion
      コピーバックアップの場合は引数がCopy
  2. 初期設定
    • 現在日付の取得
    • 設定ファイル読み込み
      • バックアップ先

        1. ホスト名、またはIPアドレス
        2. ユーザー名
        3. パスワード
        4. バックアップ先のパス(コピー先)
        5. 世代数
      • バックアップ元

        1. バックアップ対象(コピー元)
  3. 実行モードの判定(ローテーション or コピーバックアップ)
    引数により実行モードを判定しバックアップローテーション、またはコピーバックアップを実行。
  4. バックアップローテーション
    1. 共有フォルダー接続

    2. バックアップローテーション
      現在日付以前のバックアップ実績を確認[2]し世代数[3]以上の過去日付のデータを削除する。

      • ローテーションの削除対象
        フォルダーである
        かつ、書式がYYYYMMDDのフォルダー名
        かつ、現在日付以前のフォルダー
        かつ、世代数を超えた日付フォルダー
    3. 共有フォルダー切断

  5. コピーバックアップ
    1. 共有フォルダー接続
    2. コピーバックアップ
      コピー先に現在日付のフォルダーが存在する場合は、コピーバックアップ前に削除する。
      コピーバックアップではバックアップ対象のフォルダーをコピーし、コピー先で現在日付フォルダーにリネームして貼り付けする。
    3. 共有フォルダー切断

入出力ファイル

入力ファイル
  • バックアップ元 - バックアップ対象(コピー元)
    Windows Updateのログファイル

https://github.com/akiGAMEBOY/PowerShell_FileCopybackupTool/blob/master/source/powershell/setup.ini#L20-L21

出力ファイル
  • バックアップ先 - バックアップ先のパス(コピー先)
    Windows共有フォルダー

https://github.com/akiGAMEBOY/PowerShell_FileCopybackupTool/blob/master/source/powershell/setup.ini#L14-L15

GitHub Repository

https://github.com/akiGAMEBOY/PowerShell_FileCopybackupTool

フォルダー構成

PowerShell_FileCopybackupTool
│  FileCopybackupTool.bat       ・・・起動用バッチファイル
│  LICENSE.md
│  README.md
│
└─source
    ├─icon
    │      shell32-296.ico      ・・・アイコンデータ
    │
    └─powershell
            Main.ps1            ・・・プログラム本体
            setup.ini           ・・・設定ファイル

参考記事

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

脚注
  1. 平文でパスワードを保存しています。必要に応じて暗号化・複合化の処理を追加してください。 ↩︎

  2. バックアップ先のフォルダー名を確認。フォルダー名はバックアップ取得日、書式はYYYYMMDD。 ↩︎

  3. サンプルプログラムでは10世代で設定 ↩︎

GitHubで編集を提案

Discussion