イベントログ取得の実行時間を表示

イベントログ実行時間を表示してみたいと思います。実行時間の測定はmeasure-commandコマンドレッドが使えます。measure-commandはスクリプト ブロックとコマンドレットの実行にかかる時間を計測します。例えばlsコマンドの実行時間は以下のようになります。

これで実行時間が測定出来ます。今回はイベントログを取得する関数を作成し、measure-commandで関数を呼び出すようにします。なお、イベントログ取得関数はget-wmiobjectから取得する方法とget-eventlogで取得する方法の2つ作成しました。プログラムは以下です。

set-PSDebug -strict
#--------------------------
# イベントログ取得時間比較
#--------------------------

# WMIを使ってシステムログ取得
function GetEventLog1{
    $file_name = "C:\work\sys_1.log"
    $yesterday_wk = (get-Date).adddays(-1)
    $yesterday = $yesterday_wk.tostring("yyyyMMdd")  + "000000.0+540"
    get-wmiobject -Query "select * from Win32_NTLogEvent where LogFile='system' AND TimeGenerated>='$yesterday'" | out-File $file_name
}

# Get-EventLogを使ってシステムログ取得
function GetEventLog2{
    $file_name = "C:\work\sys_2.log"
    $today = get-date -hour "0" -minute "0" -second "0"
    $yesterday = $today.AddDays(-1)
    get-EventLog -logname "system" -after $yesterday  | format-list | out-File $file_name
}

# function実行時間を表示
[timespan]$t1 = measure-command{GetEventLog1}
[timespan]$t2 = measure-command{GetEventLog2}
$write_line1 = "[ WMIオブジェクトからイベントログ取得にかかる時間]  " + $t1.seconds + "." + $t1.milliseconds
$write_line2 = "[Get-EventLogからイベントログ取得にかかる時間]  " + $t2.seconds + "." + $t2.milliseconds

write-Host $write_line1
write-Host $write_line2

以下実行結果です。