前日のイベントログをWMIオブジェクトで取得する

前日のイベントログをWMIオブジェクトで取得するプログラムを作成しました。WMIオブジェクトはGet-WmiObjectコマンドレッドで取得できます。WMIクエリを使用することにより指定した項目を取得することが出来ます。今回は、ログの種類(application、security、system)、イベント生成日付(前日日付)を指定します。実際に取得するオブジェクトですが、Win32_NTLogEventオブジェクトを使用します。LogFileプロパティによりログの種類を指定し、TimeGeneratedプロパティでイベント生成日付を指定します。TimeGeneratedプロパティはYYYYMMDDHHMMSS.0+540というように指定しなくてはなりません。+540はグリニッジ標準時で指定するため、540分の時間差が存在するため、このように指定します。

set-PSDebug -strict
# ------------------------------------
# 前日のイベントログをWMIオブジェクトで取得する
# ------------------------------------

# 出力ディレクトリ
$path = "C:\work"

# 本日日付を編集
$today_wk = (get-Date).tostring("yyyyMMdd")
$today = $today_wk + "000000.0+540"

# 前日日付を編集
$yesterday_wk = (get-Date).adddays(-1)
$yesterday_wk = $yesterday_wk.tostring("yyyyMMdd")
$yesterday = $yesterday_wk + "000000.0+540"

# イベントログ取得
foreach ($log_type in "application","system","security") {
    # ファイル名作成
    $file_name = $path + "\" + $log_type + "_" + $yesterday_wk + ".log"

    # WMI クエリのwhere項目編集
    $where="LogFile='$log_type' AND TimeGenerated<'$today' AND TimeGenerated>='$yesterday'"
    
    # WMI クエリの作成
    $query = "select * from Win32_NTLogEvent where $where"
    
    # イベントログ出力
    get-wmiobject -Query $query | out-File $file_name
}