イベントログ取得の実行時間を表示
イベントログ実行時間を表示してみたいと思います。実行時間の測定は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