PowerShell вопрос с сортировкой и конвейером
Здравствуйте! Я использую PowerShell Version 5. Я запускаю команду, и она работает, но суженный поиск не возвращает результатов.
Get-EventLog System -Newest 5 | where {$_.eventID -eq 1074}
Поэтому я подумал: ох, я хочу видеть только последние 5 объектов, которые соответствуют моему фильтру. Он запускается, но не возвращает результата, поскольку в журнале событий нет идентификатора события 1074 в последних 5 записях. Так что мне просто нужно переместить этот параметр до конца. Неудачно
Get-EventLog System | where {$_.eventID -eq 1074} | -newest 5
-newest : The term '-newest' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:53
+ Get-EventLog System | where {$_.eventID -eq 1074} | -newest 5
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (-newest:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Итак, позиционирование -newest
после того, как труба перемещает параметр в положение, я думаю, что это не понято.
У кого-нибудь есть совет, как мне подойти к размышлению об этом, что поможет мне в будущем?
2 ответа
Чтобы ограничить отфильтрованные результаты максимум 5 событиями, вы должны использовать Select-Object -First 5
в конечном участке трубопровода:
Get-EventLog System | Where-Object { $_.eventID -eq 1074 } | Select-Object -First 5
-Newest <n>
это параметр, который является специфическим для Get-EventLog
и это безоговорочно возвращает первое <n>
записи, независимо от их содержания.
В командлетах нет общего параметра, который предлагает аналогичную функциональность, но есть общий Select-Object
Командлет, который позволяет выбрать до <n>
объекты от того, что его вход через -First <n>
,
Вот, вероятно, более быстрый способ получить информацию, которую вы, кажется, хотите. оно использует Get-WinEvent
вместо Get-EventLog
а также использует -FilterHashtable
параметр, позволяющий системе событий выполнять некоторую фильтрацию.
#requires -RunAsAdministrator
$FilterHash = @{
Logname = 'System'
ID = 1074
StartTime = (Get-Date).AddDays(-20)
}
Get-WinEvent -FilterHashtable $FilterHash -MaxEvents 20
это обычно заметно быстрее, чем при использовании Get-EventLog
, [ухмылка]
вот статья об идеях...
Используйте FilterHashTable для фильтрации журнала событий с помощью PowerShell - Привет, сценарист! Блог
- https://blogs.technet.microsoft.com/heyscriptingguy/2014/06/03/use-filterhashtable-to-filter-event-log-with-powershell/