PowerShell вопрос с сортировкой и конвейером - PullRequest
0 голосов
/ 08 ноября 2018

Здравствуйте, я использую 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 ]

0 голосов
/ 08 ноября 2018

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

0 голосов
/ 08 ноября 2018

Чтобы ограничить ваши отфильтрованные результаты максимум 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>.

...