PowerShell을 사용하여 IIS 로그를 정기적으로 압축 및 삭제

취지



온프레의 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
}



실행 결과 이미지



좋은 웹페이지 즐겨찾기