PowerShellを使って、古いログファイルを削除したいことはありませんか?
けど、そんな中で悩むことは、
-
- 指定した日数より古いファイルを削除する方法がわからない
- 特定の拡張子(例:
.log
)のファイルだけを削除したい - 指定したフォルダ内のサブフォルダを含めて削除したい
ですよね。
今回はそんなお悩みを解決する
- PowerShellを使った基本的なログ削除方法
- 特定の条件に基づいたファイル削除
についてまとめます!
もくじ
数日前のファイルを削除する完成イメージ
PowerShellを使うことで、以下のようなことが可能になります。
POINT
- 指定したフォルダ内のX日以上前のログファイルを削除
.log
ファイルのみを削除- サブフォルダ内も含めて削除
- 確認メッセージなしで即時削除
PowerShellで古いログファイルを削除する方法
基本的な削除コマンド
特定のフォルダ内で、7日以上前のログファイルを削除する方法です。
構文:
Get-ChildItem -Path "C:\Logs" -Filter "*.log" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item
解説:
Get-ChildItem
指定フォルダ内のファイルを取得します。-Path "C:\Logs"
対象フォルダを指定します。-Filter "*.log"
拡張子.log
のファイルのみ対象にします。Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) }
7日以上前のファイルを対象にします。Remove-Item
該当ファイルを削除します。
確認なしで削除する
通常、Remove-Item
は削除時に確認が求められることがあります。
確認なしで即削除するには -Forceを追加
Get-ChildItem -Path "C:\Logs" -Filter "*.log" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item -Force
サブフォルダ内のファイルも削除
サブフォルダも含めて検索し、ログファイルを削除する場合は -Recurse
を追加します。
Get-ChildItem -Path "C:\Logs" -Filter "*.log" -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item -Force
ログ削除処理をスケジュール実行する
定期的に古いログを削除したい場合は、タスクスケジューラで実行できます。
- PowerShellスクリプトを作成(例:
C:\Scripts\DeleteLogs.ps1
) - 以下の内容を記述
Get-ChildItem -Path "C:\Logs" -Filter "*.log" -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item -Force
- Windowsタスクスケジューラで
powershell.exe -File C:\Scripts\DeleteLogs.ps1
を登録 - 毎日自動で実行されるように設定
さいごに
いかがでしょうか。
今回は、
- PowerShellでX日以上前のログファイルを削除する方法
- 確認なしで削除するオプション
- サブフォルダも含めて削除する方法
- タスクスケジューラで自動化する方法
についてまとめました。
PowerShellを活用することで、ログ管理を効率化し、ストレージの無駄を防ぐことができます。ぜひ試してみてください!
コメントを残す