で紹介したイベントログをログファイルから取得する部分のスクリプトでは、
 
 #基準時刻から1時間前の全イベントログ
 PS C:\> Get-EventLog -list -ComputerName $s | Foreach-Object { $l =$_.Log;$l;$x += Get-EventLog -logname $l -Before $a -After $b -ComputerName $s }
 #基準時刻から1日前の全イベントログ
 PS C:\> Get-EventLog -list -ComputerName $s | Foreach-Object { $l =$_.Log;$l;$y += Get-EventLog -logname $l -Before $a -After $c -ComputerName $s }
 #基準時刻から7日前の全イベントログ
 PS C:\> Get-EventLog -list -ComputerName $s | Foreach-Object { $l =$_.Log;$l;$z += Get-EventLog -logname $l -Before $a -After $d -ComputerName $s }
 
 集計の対象となるイベントログを別々に求めていました。これでは、時間がかかりすぎます。そこで、次のように変更します。
 
 #基準時刻から7日前の全イベントログ
 PS C:\> Get-EventLog -list -ComputerName $s | Foreach-Object { $l =$_.Log;$l;$z += Get-EventLog -logname $l -Before $a -After $d -ComputerName $s }
 #上記ログから、1日前のイベントログを取得
 PS C:\> $y = $z | Where-Object{ $_.TimeGenerated -gt $b }
 #同じく上記ログから、1時間前のイベントログを取得
 PS C:\> $x = $z | Where-Object{ $_.TimeGenerated -gt $c }
 
 このスクリプトは、いったん取得したイベントログを、フィルターすることで、イベントログの再取得と比較して短時間に処理をすることができるようになります。
 
 
広告