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