Добавить фильтр в 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. #>
}