趣旨
オンプレのSharePoint Server構築案件で必要になったので作成しました。
要件:
・過去180日より古いIISログをzipに圧縮する
・圧縮したファイルは365日間保存する。それを超えたら削除する
Powershell ソースコード
#------------------------------------------------- #変数の設定 #------------------------------------------------- #region #IISログフォルダのパス $IISLogFolderPath = "C:\inetpub\logs\LogFiles\W3SVCXXXXXX\" #IISログの保持期限(単位:日) #補足:この期限を超えたら圧縮する。圧縮元のIISログは削除する。 $IISLogRetentionPeriod = 180 #圧縮したIISログを保存するフォルダのパス $folderPathToSaveCompressedIISLog = "C:\inetpub\logs\LogFiles\W3SVCXXXXXX\\アーカイブ保存\" #圧縮したIISログの保持期限(単位:日) #補足:この期限を超えたら削除する。 $compressedIISLogRetentionPeriod = 365 #endregion #------------------------------------------------- #古いIISログを圧縮する #------------------------------------------------- #圧縮したIISログを保存するためのフォルダがなければ作成する if((Test-Path -Path $folderPathToSaveCompressedIISLog) -eq $false) { New-Item $folderPathToSaveCompressedIISLog -ItemType Directory } #IISログをすべて取得 $IISLogs = Get-ChildItem -Path $IISLogFolderPath -File #古いIISログを圧縮 foreach($IISLog in $IISLogs) { #ファイル名をもとに作成日を取得する $matchedIISLogCreatedDateString = [RegEx]::Matches($IISLog.BaseName,"\d{6}$") $IISLogCreatedDate = [DateTime]::ParseExact($matchedIISLogCreatedDateString.value,"yyMMdd", $null) #作成日から経過した日数を取得 $timeSpanFromIISLogCreated = (Get-Date) - $IISLogCreatedDate #作成日から保持期限が経過していなければ処理をスキップする if($timeSpanFromIISLogCreated.Days -lt $IISLogRetentionPeriod) { continue } #圧縮ファイルのフルパスを定義 $destinationPath = $folderPathToSaveCompressedIISLog + $IISLogCreatedDate.Date.ToString("yyyyMMdd") + ".zip" Compress-Archive ` -Path $IISLog.FullName ` -DestinationPath $destinationPath ` -Update #圧縮前のファイルを削除 Remove-Item -Path $IISLog.FullName } #------------------------------------------------- #古い圧縮ファイルを削除する #------------------------------------------------- #圧縮したIISログファイルをすべて取得する $compressedIISLogs = Get-ChildItem -Path $folderPathToSaveCompressedIISLog -File #古い圧縮ファイルを削除 foreach($compressedIISLog in $compressedIISLogs) { #ファイル名をもとに作成日を取得する $compressedIISLogCreatedDate = [DateTime]::ParseExact($compressedIISLog.BaseName,"yyyyMMdd", $null) #作成日から経過した日数を取得 $timeSpanFromCompressedIISLogCreated = (Get-Date) - $compressedIISLogCreatedDate #作成日から保持期限が経過していなければ処理をスキップする if($timeSpanFromCompressedIISLogCreated.Days -lt $IISLogRetentionPeriod + $compressedIISLogRetentionPeriod) { continue } #ファイルを削除 Remove-Item -Path $compressedIISLog.FullName }
実行結果のイメージ