0

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
4

1 に答える 1

2

Get-WinEvent はどうですか?このようなもの:

Get-WinEvent -ComputerName $MyComputer -MaxEvents 100 -FilterHashtable @{
    LogName=$MyLog;
    ID=$MyID;
    <# etc. #>
}
于 2016-02-24T14:03:30.993 に答える