概要
- Get-Eventlog コマンドレットは、PowerShell 2.0 でパラメーターが増強されたので、イベントログを見るだけなら Where-Object コマンドレットは必要なさそう
- オブジェクトの特定のプロパティを表示させたいときは Format-Table コマンドレット
PowerShell 1.0 の方法
「Microsoft Security Essentials のスキャン履歴を取得する」では、以下のコードでイベントログにアクセスしていた。
Get-EventLog -logName System | Where-Object { $_.Source -eq "Microsoft Antimalware" -and $_.EventId -eq 1001 } | Select-Object -first 10
実は、このやり方では実行に少し時間がかかる。
これはおそらく、Get-Eventlog コマンドレットが全てのシステムログを取り出しているからだろう。上記の方法を使う限り、最終的に必要とされるレコード数が少なかったとしても、全てのログレコードを取得する必要がある。明らかに効率が悪い。
PowerShell 2.0 の方法
しかし、PowerShell 2.0 では、Get-Eventlog コマンドレットに新たに追加されたパラメーターを使って、イベントソースやイベントIDの絞り込むことができるようになったようだ。
Get-EventLog -LogName System -Source "Microsoft Antimalware" -InstanceID 1001 -Newest 10
イベントソースでフィルタするために Source 、イベントIDでフィルタするために InstanceID 、新着の10件のみを表示させるために Newest (これは1.0からあった)というプロパティを使っている。
ということで Where-Object コマンドレットも、Select-Object コマンドレットも必要なくなった。
Format-Table コマンドレット
このページで知ったのだけど、Format-Table コマンドレットを使うことで、オブジェクトを画面に表示するときの形式を整えられるようだ。
便利そうなのは Property パラメーターで、オブジェクトのどのプロパティを表示するか、明示的に指定できる。
PS C:\Users\daisuke> Get-EventLog -LogName System -Source "Microsoft Antimalware" -InstanceID 1001 -Newest 10 | Format-Table -Property TimeGenerated, Source, InstanceID, Message TimeGenerated Source InstanceId Message ------------- ------ ---------- ------- 2010/04/16 20:13:42 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/14 2:19:46 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/11 2:05:17 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/10 8:59:37 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/09 2:24:08 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/08 2:24:40 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/07 22:14:01 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/06 2:24:08 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/04/05 19:45:45 Microsoft Antimalware 1001 %Microsoft Antimalware sca... 2010/03/31 2:48:31 Microsoft Antimalware 1001 %Microsoft Antimalware sca...
参考文献
- Hey, Scripting Guy! Windows PowerShell 1.0 のスクリプトを Windows PowerShell 2.0 で使用する方法はありますか | 2009/10 <http://technet.microsoft.com/ja-jp/scriptcenter/ff458162.aspx>