2010年11月16日火曜日

◆イベントログを監視する

以下のサイトを参考にしてイベントログの監視スクリプトを作ってみた。
The PowerShell Guy : Hey, PowerShell Guy ! How Can I Monitor Event Log Messages for Specific Words?

MWatch-EventLog.ps1

param(
    [switch]${??}
)
$comment = @'
#####################################################

イベントログをリアルタイムにコンソール出力する
Quitメッセージにより終了する
  (MWatch-EventLog.ps1)
  終了コマンド:
  Write-EventLog -LogName Application -Source Test -EntryType information -Message "Quit" -EventId 9999

param(
    [switch]${??}
)

例:
    #
    MWatch-EventLog.ps1

#####################################################
'@
Function Main{
    $ew = new-object system.management.ManagementEventWatcher
    $ew.query = "Select * From __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent'"
    do
        {
           $e = $ew.WaitForNextEvent()
           FormatWrite($e.TargetInstance)
        }
    while ($e.TargetInstance.Message -ne "Quit") 
}

Function FormatWrite($log){
    $time = $log.TimeWritten.Substring(0,14)
    $f = "yyyyMMddHHmmss"
    $time = [DateTime]::ParseExact($time,$f,$null)
    $time = $time.AddHours(9)
    $logItems = ($time.ToString("F"),$log.Logfile,$log.Type,$log.Message)

    switch($log.Type){
        "情報"{$color = "White";break}
        "警告"{$color = "Yellow";break}
        "エラー"{$color = "Red";break}
        default{$color = "Green"}
    }
    Write-Host ([String]::Join("`t",$logItems)) -ForegroundColor $color
}

if(${??}) {$comment;return}
Main  #エントリーポイント

一応外部から監視を止めれるように”Quit”というメッセージが来たら終了するようにしているが、特に必要ないかもしれない。
直接監視を止める時はCtrl + Break で。

0 件のコメント:

コメントを投稿