【PowerShell】古いファイルのみを圧縮する

PowerShell

【PowerShell】古いファイルのみを圧縮する

こんにちは!SE ブログの相馬です。

 

 

 

今回は、古いファイルを ZIP に圧縮する方法について書いてみました。古いファイルを ZIP に圧縮する運用としてよく作業するのがログファイルかと思います。サーバーやネットワークの運用をしていると、ログファイルがどんどんたまりますよね。ログファイルは大体日時別にたまりますので、一カ月も経てばものすごい量になります。

 

 

サーバー上で動いているアプリケーションの機能でログファイルの圧縮の機能があれば良いのですが、無い場合は手動でファイルを指定して ZIP で圧縮という事をするのは骨が折れる作業だと思いますし、時間がもったいないと思います。

 

 

ここでは PowerShell を使い、更新日時が指定した日数より前であれば指定のフォルダに ZIP ファイルとして圧縮する事ができますので、説明してゆきたいと思います。

 

 

 

ファイルを ZIP に保存する

 

 

ファイルを ZIP に保存するには、Compress-Archive コマンドレットが使えます。

 

Compress-Archive | Microsoft PowerShell

 

 

ここでは、以下の流れで処理をします。

 

  1. ログファイルがある C:\temp\log のパスを $purge_dir に代入
  2. ファイルを削除する指定日数は 3 日前として $retention に代入
  3. Get-ChildItem コマンドレットで、ログファイルの情報を取得
  4. Where-Object コマンドレットで、 3 日前より古いファイルの情報を取得
  5. Get-ChildItem コマンドレットで、該当ファイルを取得
  6. Compres-Archive コマンドレットで、圧縮ファイルを指定の場所に保管

 

 

処理前は C:\temp\log フォルダに以下のようにログファイルがある状態です。

 

 

 

$purge_dir = "C:\temp\log"
$retention = 3

Get-ChildItem -File $purge_dir | `
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$retention)} | `
Get-ChildItem | Compress-Archive -DestinationPath C:\temp\log\archive\test.zip

 

 

処理後には C:\temp\log\archive フォルダに ZIP ファイルが保管されました。

 

 

 

 

ただし、このスクリプトではエラー処理に対応しておりませんので、try-catch ブロックで書いてみます。

 

$purge_dir = "C:\temp\log"
$archive_dir = "C:\temp\log\archive"
$retention = 3
$zip_file = "C:\temp\log\archive\test.zip"

if (Test-Path $zip_file) {
    throw "zipファイルは既に存在しています。"
}

if (-Not(Test-Path $archive_dir)) {
    throw "zipを保存するフォルダは存在していません。"
}

    try {

        if (Test-Path $purge_dir) {
        Get-ChildItem -File -Recurse $purge_dir | `
        Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$retention)} | ` 
        Get-ChildItem | Compress-Archive -DestinationPath C:\temp\log\archive\test.zip

    } else {

        throw "$purge_dirにあるファイルが見つかりません。"

    }

} catch {

        Write-Host "$purge_dirに対してエラーが発生しました。"

} finally {

        Write-Host "ZIPが作成されました。" -ForegroundColor green

}

 

 

 

以上となります。いかがでしょうか。

 

 

このような形で古いファイルを削除する事が自動化できますと、ログファイル管理やバックアップファイルの管理の自動化など、色々な用途で応用ができるかと思います。

 

 

では最後までお読みいただきありがとうございました!

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りでマイペースな人です。

人気記事

1

こんにちは!SE ブログの相馬です。       今回は、PC に適用されている GPO を確認する方法について書きました。     グループポリシー ...

2

こんにちは!SE ブログの相馬です。       今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは ...

3

こんにちは!SE ブログの相馬です。       今回は、グループポリシーを使って、特定のコンピューターに対して、ドメインユーザーに Administrators 権限を ...

4

こんにちは!SE ブログの相馬です。       今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 ...

5

こんにちは!SEブログの相馬です。       今回は、ユーザープロファイルを削除する方法について書いてみました。     1 台の PC を複数人で ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!SE ブログの相馬です。       今回は、Windows Server 2016 で NTP サーバーと同期する方法について書きました。   & ...

-PowerShell
-