Есть ли способ отфильтровать записи журнала событий с помощью 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