<# .SYNOPSIS 保持期限が過ぎたログを削除します。 .DESCRIPTION 保持期限が過ぎたログを削除します。 条件にマッチした場合は、ファイルもフォルダーも削除されます。 .NOTES {$SCRIPT_HOME}\etc\Exec-Logrotate.confにCSV形式で各種条件を設定してください。 書式 LogDir ログ保存フォルダーを指定します。 LogPrefix 検索対象の名前を指定します。Exec-Logrotateを指定した場合は、{$LogDir}\Exec-Logrotate* が検索されます。 ExpireDays 保持期限を指定します。30日保管する場合は、-30と指定します。 .EXAMPLE C:\PS> .\Exec-Logrotate.ps1 .LINK http://www. #> <# **************************************************************************** * 引数設定 *************************************************************************** #> [CmdLetBinding()] param ( ) <# **************************************************************************** * 環境設定 *************************************************************************** #> # ***** 環境フォルダ設定 $HSC_HOME = Convert-Path -Path (Join-Path -Path (Split-Path -Path $Script:myInvocation.MyCommand.Path -Parent) -ChildPath ..\) # スクリプトの一つ上のフォルダーをHOMEに設定 $HSC_BIN = Split-Path -Path $Script:myInvocation.MyCommand.Path -Parent # スクリプトの存在するフォルダーをBINに設定 $HSC_ETC = Join-Path -Path $HSC_HOME -ChildPath \etc -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_LIB = Join-Path -Path $HSC_HOME -ChildPath \lib -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_TMP = Join-Path -Path $HSC_HOME -ChildPath \tmp -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_LOG = Join-Path -Path $HSC_HOME -ChildPath \log -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す $HSC_VAR = Join-Path -Path $HSC_HOME -ChildPath \var -Resolve # フォルダの存在チェックをしたくない場合は、-Resolveを外す # ***** 各種ファイル設定 $HSC_EPPlus = Join-Path -Path $HSC_LIB -ChildPath \EPPlus.dll $HSC_ETCFILE = Join-Path -Path $HSC_ETC -ChildPath \Exec-Logrotate.conf -Resolve $HSC_LogPrefix = $Script:myInvocation.MyCommand.Name # 共通関数呼出 .$HSC_LIB\HSC-SharedFunction.ps1 # Transcriptの発行 $HSC_DetailLogfile = Join-Path -Path $HSC_LOG -ChildPath ($HSC_LogPrefix + '-Detail_' + (Get-Date -Format 'yyyyMMdd') + '.log') Start-transcript -Path $HSC_DetailLogfile -Append # 設定ファイル読み込み $HSC_ETC_Datas = Get-Content -Path $HSC_ETCFILE -Encoding Default | ConvertFrom-Csv # 処理開始メッセージ HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('* ログローテーションを開始します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') <# **************************************************************************** * メイン *************************************************************************** #> foreach ($HSC_ETC_Data in $HSC_ETC_Datas) { # 削除対象日時算出 $HSC_ExpireDate = (Get-Date).AddDays($HSC_ETC_Data.ExpireDays) $HSC_TargetName = $HSC_ETC_Data.LogPrefix + '*' HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('==============================') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('対象ログフォルダ :' + $HSC_ETC_Data.LogDir) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('対象ログプレフィックス:' + $HSC_ETC_Data.LogPrefix) HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_ExpireDate.ToString() + '以前のログが削除されます。') # 指定日付以前のファイル一覧取得 $HSC_TargetFiles = Get-ChildItem -Path $HSC_ETC_Data.LogDir -Recurse | Select-Object FullName, Name, Length, LastWriteTime ` | Where-Object { $_.LastWriteTime -lt $HSC_ExpireDate } | Where-Object { $_.Name -match $HSC_TargetName } ` | Sort-Object { $_.FullName } # 削除対象ログがない場合は、対象がないメッセージを出力する if ($HSC_TargetFiles -eq $null) { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('削除対象のログがありません。') } else { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_TargetFiles | Select-Object -Property FullName, Length, LastWriteTime | Out-String) } # マッチしたファイルを削除する foreach ($HSC_DeleteFile in $HSC_TargetFiles) { HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_DeleteFile.FullName + 'を削除します。') Remove-Item -Path $HSC_DeleteFile.FullName -Force HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ($HSC_DeleteFile.FullName + 'を削除しました。') } } # 処理終了メッセージ HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('==============================') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('* ログローテーションを終了します。') HSC-Write-Log -LogPrefix $HSC_LogPrefix -LogPath $HSC_LOG -LogMessage ('************************************************************') # Transcriptの停止 Stop-Transcript