Pocket

前回からの続き。

ログをローテーションさせ、一定期間のログだけ残すようにした。
これでWindows Serverでのログ管理が楽になるだろう。

Sponsored Links

■イベントログローテート.ps1

#Event log rotate PowerShell
$FromDay      = -1
$Day          =  1
#取得対象のログファイルを指定(,で区切って記述)
$LogName      = "Application,System,Security"  -split ","
#作成するログアーカイブファイルの設置場所を指定
$OutFolder    = "C:\log"
#ログ保持期間
$LogStock     = -7

$LogDate      = (Get-Date).AddDays($fromDay).ToString("yyyyMMdd")
$StartTime    =
  [DateTime](Get-Date).AddDays($fromDay).ToString("yyyy/MM/dd 00:00:00")
$StartUtcTime =
  [System.TimeZoneInfo]::ConvertTimeToUtc(
    $startTime).ToString("yyyy-MM-ddTHH:mm:ssZ")
$EndUtcTime   =
  [System.TimeZoneInfo]::ConvertTimeToUtc(
    $StartTime.AddDays($Day)).ToString("yyyy-MM-ddTHH:mm:ssZ")

$Filter       = @"
  Event/System/TimeCreated[@SystemTime>='$startUtcTime'] and
  Event/System/TimeCreated[@SystemTime< '$endUtcTime']
"@ 

for ( $i = 0 ;$i -lt  $LogName.count; $i++ )
    {
    $OutFileName  = $LogName[$i]+"_"+$LogDate+".evtx"
    $OutFolders   = $OutFolder+"\"+$LogName[$i]
    $OutFile      = $OutFolders+"\"+$OutFileName
    if ((Test-Path $OutFolders) -eq $false){
        New-Item -path $OutFolders -type directory
        }
    if ((Test-Path $OutFile) -eq $true){
        Remove-Item $OutFile
        }
    $evsession    =
      New-Object -TypeName System.Diagnostics.Eventing.Reader.EventLogSession
    $evsession.ExportLog($LogName[$i],"LogName",$Filter,$OutFile)

    Get-ChildItem $OutFolders -Recurse | `
    Where-Object  { $_.Name -lt $LogName[$i]+"_"+(get-date).adddays($LogStock).ToString("yyyyMMdd") + ".evtx"} | `
    foreach-object { $_.Delete() }
    }

これを毎日深夜にでも実行させれば、1日ごとのログが取得できる。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。