0

以前の質問の更新として、私が今まで持っているスクリプトを投稿します。最初の 2 つのタスクは完全にスクリプト化でき、30 日未満のバックアップが残り、それより古い場合は日曜日に作成されたバックアップのみが残ります。ただし、3番目のタスクを邪魔することはできません。3番目のタスクをどのように達成できるかについて、誰かが私に指針を教えてもらえますか? どんな助けでも大歓迎です。

これが私のコードソファーです:

Function FirstCheck{

$Today = GET-Date

#Check for *.BAK files to see if older than 30 days.
$BackupsOlderThan30 = GET-CHILDITEM C:\Temp\OnTracBak\ –filter *.BAK | WHERE { (($Today - $_.LastWriteTime).Days –gt 30 ) }

#Check for files older than 30 days and that are not Sunday
$NotWeeklyBackups=$BackupsOlderThan30 | where { ($_.LastWriteTime ).DayOfWeek –ne ’Sunday’ }

$NotWeeklyBackups | REMOVE-ITEM

$NotWeeklyBackups.Count

} 

あなたに質問/ちょっとした挑戦があるかもしれません。できるだけわかりやすく説明しようと思います。

状況: 当社は顧客に対して SLA を使用しています。

この SLA の項目の 1 つはバックアップ条項です。ここでは、いくつかのルールを定義しました。

  1. 今日から最初の 30 日間は、毎日バックアップを作成して保管する必要があります。
  2. 2 か月目と 3 か月目は、毎週バックアップを保持する必要があります
  3. 4 か月目から 24 か月目までは、バックアップを毎月保持する必要があります。

現在、バックアップは毎日行われています。その結果、現在のバックアップ フォルダーのサイズは約 4 TB です。(かなり大きいです。)

もちろん、バックアップファイルを手動で追跡して削除または保存することもできますが、もちろん、Powershell スクリプトを使用してこれを自動化したいと考えています。

スクリプトは次のことを行う必要があります。 フォルダーとサブフォルダーで .bak および .trn ファイルを確認します。これらのファイルの日付を取得し、次のルールを適用します。

  1. ファイルが 1 ~ 30 日経過している場合は、すべてのファイルを保持します。
  2. ファイルが 2 ~ 3 か月前のものである場合は、毎週 (日曜日) に完全バックアップを保持します (2. に該当する他のバックアップ ファイルを削除します)。
  3. ファイルが 4 ~ 24 か月前のものである場合は、その月の第 4 週ごとに完全バックアップを保持します... (3. が適用される他のバックアップファイルを削除します)

現在、スクリプト作成を開始する方法や場所、または明らかにこれらの拡張検索を実行する方法についてはわかりません... :-(

4

1 に答える 1

1

Get-ChildItemコマンドレットを使用してファイルを一覧表示します。各ファイルにはLastWriteTimeプロパティがあり、コレクションをフィルタリングできます。フィルタリングのビジネス ルールは、読者の演習として残されています。簡単なフィルタリングの例はそうです、

$files = @(gci path-to-files) # Force gci to return an array
$cutPoint = (get-date).addDays(-30) # Get date 30 days ago
$filesToPrune = $files | ? { $_.LastWriteTime -lt $cutPoint } # Files for archive process
于 2013-08-12T10:26:07.690 に答える