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

Есть ли способ отфильтровать записи журнала событий с помощью PowerShell перед их извлечением?

i.e.

Вместо:

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

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

person JohnLBevan    schedule 24.02.2016    source источник


Ответы (1)


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

Get-WinEvent -ComputerName $MyComputer -MaxEvents 100 -FilterHashtable @{
    LogName=$MyLog;
    ID=$MyID;
    <# etc. #>
}
person n01d    schedule 24.02.2016
comment
Спасибо n01d; не знал, что существует так много разных команд, делающих одно и то же! Хорошие знания. - person JohnLBevan; 24.02.2016