Добавить фильтр в Get-EventLog (на стороне сервера), возвращая только самые новые N записей

Есть ли способ отфильтровать записи журнала событий с помощью 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 источник или выполнить фильтрацию по диапазону идентификаторов событий, в настоящее время, похоже, нет никакого способа.

Я смотрел на использование Get-WmiObject вместо Get-EventLog, но хотя это позволяет выполнять фильтрацию на стороне сервера, я не смог определить способ ограничения количества возвращаемых результатов (т. е. вернуть на мой компьютер перед сортировкой, а затем использовать select-object"s -first чтобы затем отфильтровать результаты).

Get-WmiObject Win32_NTLogEvent -ComputerName $MyComputer `
-filter "(logfile='$MyLog') and (sourcename != 'SomeValue') and (sourcename != 'SomeOtherValue') " `
| Sort-Object TimeGenerated -Descending `
| Select-Object -First 10

1 ответ

Решение

Как насчет Get-WinEvent? Что-то вроде этого:

Get-WinEvent -ComputerName $MyComputer -MaxEvents 100 -FilterHashtable @{
    LogName=$MyLog;
    ID=$MyID;
    <# etc. #>
}
Другие вопросы по тегам