Каждый администратор системы Windows, вероятно, знаком с журналом событий Windows. Использование этой командлеты в PowerShell позволяет системным администраторам анализировать множество событий одновременно на многих компьютерах. Это освобождает системных администраторов от необходимости кликать мышью в Просмотре событий, пытаясь определить правильный фильтр для использования и определить точное место хранения этого критического события. Однако у Get-EventLog
есть свои недостатки, о которых вы увидите далее.
Вывод журналов событий с помощью Get-EventLog
Командлет Get-EventLog
доступен во всех современных версиях Windows PowerShell. В его самом простом использовании этот командлет требует указания журнала событий для запроса, после чего он отобразит все события в этом журнале.
Но что, если вы сначала не знаете имени журнала событий? В этом случае нам нужно определить все журналы событий, доступные на нашем локальном компьютере. Мы делаем это с помощью команды Get-EventLog -List
.

Теперь вы можете видеть, что у меня есть несколько журналов событий на моей локальной системе, но вас, возможно, интересует, где остальные? Десятки других журналов событий появляются в разделе Журналы приложений и служб в Просмотре событий. Почему они здесь не отображаются?
Если вам нужны эти события, к сожалению, Get-EventLog
не будет работать. Вместо этого вам придется обратиться к Get-WinEvent. Командлет Get-EventLog
можно считать устаревшим на данный момент, но я все равно часто его использую, просто потому что он настолько прост в использовании.
Запрос событий с помощью Get-EventLog
Теперь, когда мы знаем все доступные журналы событий, мы можем прочитать события внутри этого журнала событий. Может быть, я хочу увидеть все события в журнале событий “Приложения”. Чтобы получить эти события, мне нужно указать параметр LogName
с помощью Get-EventLog
, и командлет вернет все события в этом журнале событий.

По умолчанию вы увидите только шесть свойств в выводе:
Index
Time
EntryType
Source
InstanceId
Message
На самом деле Get-EventLog
возвращает 16 из них. Причина, по которой вы видите только шесть, заключается в правилах форматирования PowerShell, которые определяют вывод. Ниже приведен пример фактического вывода, найденного путем перенаправления Get-EventLog
к Select-Object
и выбора всех свойств.

Фильтрация с помощью Get-EventLog
Вероятно, когда мы ищем события, нам не нужны все события. Вместо этого нам нужно только несколько. В этом случае нам нужно фильтровать определенные события. Get-EventLog
имеет несколько способов сделать это. Командлет Get-EventLog
может фильтровать по временной метке, типу записи, идентификатору события, сообщению, источнику и имени пользователя. Это позволяет обрабатывать большинство способов поиска событий.
Чтобы продемонстрировать фильтрацию, я могу запросить события через определенные промежутки времени и найти десять самых новых событий. Для этого я могу использовать параметр Newest
и указать, сколько событий я хочу увидеть. Команда Get-EventLog -LogName Application -Newest 10
вернет только десять последних событий.
Возможно, мне нужно найти все события, произошедшие после определенного момента времени. Для этого есть параметр After
. Параметр After
принимает дату и время. Если я хочу найти только события в журнале Application, которые произошли после 26/01/19 10:17, я могу использовать команду Get-EventLog -LogName Application -After '26/01/19 10:17'
. Таким же образом мы можем выбрать события, которые произошли до определенной даты, с помощью параметра Before
.
У команды Get-EventLog
есть много разных способов фильтрации, не включая фильтрацию по временной метке. Мы также можем фильтровать события по другим атрибутам, таким как идентификатор события (Instance ID) и сообщение, которые обычно являются общими атрибутами для поиска. Возможно, я знаю, что ищу событие с ID 916; мы передаем 916 параметру InstanceId
.
Мы также можем комбинировать фильтры. Возможно, мне возвращается много событий с ID 916, но я хочу отфильтровать только те, которые содержат строку svchost в сообщении. В этом случае мы можем добавить параметр Message
к команде Get-EventLog
и указать подстановочный знак, например, svchost.
Бонусный скрипт!
Вам нужен отличный пример использования Get-EventLog в скрипте реального мира? Если да, то вы везунчик! Ниже приведен расширенный вариант использования Get-EventLog, который вы можете скачать и использовать уже сегодня!
Краткое описание
Командлет Get-EventLog
– отличная команда для быстрого запроса общих журналов событий. Ее легко использовать, и она предоставляет базовые возможности фильтрации. Однако, если вам нужно провести более глубокое исследование журналов событий, вероятно, лучше подойдет команда Get-WinEvent
, но она немного сложнее в использовании и иногда требует знания синтаксиса, такого как XPath.