PowerShell を使用してイベント ログ エントリを取得する前にフィルター処理する方法はありますか?
すなわち
それ以外の:
[string[]]$IgnoredSources = 'SomeValue','SomeOtherValue'
Get-Eventlog -LogName $MyLog -ComputerName $MyComputer `
| ?{$IgnoredSources -notcontains $_.Source} `
| Sort-Object TimeGenerated -Descending `
| Select-Object -First 10
何かのようなもの:
Get-Eventlog -LogName $MyLog -ComputerName $MyComputer `
-Filter {(Source -ne 'SomeValue') -and (Source -ne 'SomeOtherValue')} `
-Newest 10
より詳しい情報
where-object
引き戻された結果をフィルタリングするステートメントを追加できることは承知しています。しかし、それはサーバー側でフィルタリングするよりも効率が悪く、フィルタリングされた後に のようなコマンドが-Newest 100
必ずしも 100 の結果を返すとは限らないことを意味します (つまり、イベント ログ全体をプルバックして、確実に最新のものを取得する必要があります)。
-After
また、日付についてはと-Before
属性を介してこれが可能であり、 と のリストを提供してそれらに制限できることも認識してい-Username
ます-Source
。ただし、1 つのソースを除外したり、イベント ID の範囲でフィルター処理したりする場合は、現時点では方法がないようです。
Get-WmiObject
の代わりにを使用することを検討しましたGet-EventLog
が、これによりサーバー側でフィルタリングを行うことができますが、返される結果の数を制限する方法を特定できませんでした (つまり、ソートする前にマシンに返され、 を使用してフィルタリングしますselect-object
)-first
結果を下げる)。
Get-WmiObject Win32_NTLogEvent -ComputerName $MyComputer `
-filter "(logfile='$MyLog') and (sourcename != 'SomeValue') and (sourcename != 'SomeOtherValue') " `
| Sort-Object TimeGenerated -Descending `
| Select-Object -First 10