Windows имеет несколько различных журналов событий, но как быстро их получить? Cmdlet Get-WinEvent
может получить классические журналы событий Windows, такие как системные и приложений, журналы, созданные технологией журнала событий Windows, а также журналы слежения за событиями для Windows (ETW)!
В этой статье вы узнаете, как использовать Get-WinEvent
для извлечения и фильтрации событий из журналов событий!
Предварительные требования
Для продолжения вам нужна только текущая версия Windows 10 и PowerShell 5.1 и выше. В этой статье используются Windows 10 и PowerShell 7.1.
Перечисление доступных журналов с Get-WinEvent
Трудно знать, какие записи журнала вам могут понадобиться, не зная всех доступных журналов. С помощью Get-WinEvent
вы можете быстро перечислить все доступные журналы, используя параметр -ListLog
. Значение параметра *
говорит Get-WinEvent
перечислить все журналы без фильтрации. Как показано ниже, все журналы извлекаются, но только ограниченный набор свойств показан с использованием Select-Object
cmdlet.
Не все журналы включены по умолчанию. Вам может потребоваться открыть “Просмотр событий”, найти журнал и щелкнуть правой кнопкой мыши, чтобы Включить журнал перед тем, как события начнут отображаться.

Все журналы, начиная с Windows Vista, сохраняются в файлах
*.evtx
, а не в старом формате*.evt
. СвойствоIsClassicLog
указывает, определены ли события журнала в файле сообщений, формате Message File*.mc
, или в формате манифеста*.xml
.
Интересное свойство – LogMode
, которое вы, возможно, заметили, обычно устанавливается в значение Circular
.
Circular
– Перезаписывать старую запись журнала, когда он заполнен.Retain
– Сохранять все события, пока журнал не заполнится, и приостановить запись до освобождения места.AutoBackup
– Автоматически создавать резервные копии и архивировать журналы событий по мере заполнения.

Наконец, если посмотреть на свойство LogType
, то существует несколько различных типов журналов. Это свойство скорее служит для категоризации, но обычно оно информирует о том, как используется журнал и какие типы событий отображаются.
- Административный – В первую очередь предназначен для конечных пользователей и административных пользователей.
- Аналитический – Обычно представляет собой журнал высокого объема, предназначенный для описания операций программы.
- Отладка – Предназначен для разработчиков, нуждающихся в глубоком погружении во внутренности программы.
- Эксплуатационный – Событие, происходящее во время работы, полезное для диагностики событий и запуска процессов.

Перечисление поставщиков журнала событий
Теперь, когда у вас есть четкое представление о различных журналах и их свойствах, полезно понимать, что такое Поставщик журнала событий. Поставщик, в терминологии журнала событий, является источником события.
Поставщики журнала событий уникальны и связаны с каждым журналом, такими как журналы приложений или системы, и служат именованным источником, откуда происходит событие.
Возможно, вам захочется находить проблемы при фильтрации журналов, и вас может интересовать только информация о конкретном поставщике. Чтобы просмотреть доступные поставщики, используйте параметр -ListProvider
. Как показано ниже, *
перечисляет все доступные поставщики и к каким журналам они привязаны, таким как Windows PowerShell или System.

Возможно, вам стоит перечислить только те поставщики, которые доступны для конкретного журнала, например, System
. Для этого вы можете фильтровать события, используя команду Where-Object
, используя значения свойства LogLinks
. Свойство LogLinks
отображает связанные журналы событий в виде списка.
Для фильтрации запрашиваемых журналов с использованием Where-Object
используйте оператор сравнения -In
, чтобы фильтровать только те события, где в значении свойства LogLinks
есть System
. Наконец, использование Format-Table -AutoSize
облегчит восприятие вывода, как показано ниже.

Получение классических журналов событий с помощью Get-WinEvent
Первым шагом в устранении проблемы с Windows является получение журнала приложений или системы, который является классическими журналами событий. В приведенном ниже примере вы получите первые 100
событий, используя параметр -MaxEvents
журнала событий приложений.
Для удобства чтения результатов выберите только те свойства, которые необходимы для упрощения восприятия записей. В противном случае записи сгруппированы по имени поставщика, что затрудняет разбор списка результатов.

Нахождение современных событий Windows с помощью Get-WinEvent
Теперь, когда вы получили события из классического журнала приложений, что насчет результатов из более нового журнала событий Windows, такого как Microsoft-Windows-WindowsUpdateClient/Operational
?
В отличие от классического журнала событий, такого как System
, Microsoft-Windows-WindowsUpdateClient/Operational
является современным журналом, с которым Get-WinEvent
работает так же, как указано ниже.

А как насчет получения только старейших событий? Хотя вы можете изменить порядок результатов с помощью Sort-Object
, используйте параметр -Oldest
, чтобы получить первые 10
событий, как показано ниже.
Команда Get-WinEvent
фильтрует результаты для вас, а не возвращает все результаты и не сортирует их, что typic с медленнее.

Получение файлов слежения за событиями Windows (ETW) с помощью Get-WinEvent
Возможно, у вас есть экспортированный файл *.evtx
с другого компьютера или вы сделали резервную копию существующего журнала. Вы можете прочитать эти журналы с помощью средства Get-WinEvent
. Если вам нужно сохранять журналы для целей аудита, Get-WinEvent
– отличный способ быстро запрашивать эти журналы с помощью стандартных командлетов в сценариях.
Чтобы продемонстрировать получение записей журнала из файла *.evtx
, вам потребуется экспортированный файл журнала.
1. Откройте Просмотр событий и перейдите к журналу. В этом примере выберите журнал Приложения и сервисные журналы → PowerShell Windows.

2. Затем нажмите на пункт меню Сохранить все события как… в разделе Действия.

3. Сохраните файл в месте на диске, чтобы его можно было получить с помощью команды Get-WinEvent
.

Теперь, когда вы экспортировали файл журнала, передайте расположение файла журнала с помощью параметра -Path
для чтения событий. В приведенном ниже примере журнал Windows PowerShell экспортируется для последующего использования.

Фильтрация журналов событий Windows с использованием Get-WinEvent
Хотя вы можете фильтровать журналы с помощью стандартной команды Where-Object
, Get-WinEvent
предлагает встроенные фильтры. При возврате всех результатов и последующем фильтровании выполняется больше работы, чем необходимо. Вместо этого всегда старайтесь фильтровать источник настолько, насколько это возможно.
Команда Get-WinEvent
предоставляет три параметра, помогающих вам фильтровать тысячи событий, называемые -FilterHashTable
, -FilterXPath
и -FilterXML
. Каждый параметр в основном выполняет ту же задачу, просто по-разному.
Фильтрация журналов событий с помощью FilterHashTable
-FilterHashTable
параметр фильтрует контент на основе совпадающих свойств, таких как LogName
. Вместо использования параметра -LogName
для фильтрации по конкретному журналу, вы можете использовать хэш-таблицу, такую как @{'LogName' = 'Application'}
, которая соответствует свойству события LogName
.
Приведенный ниже пример предоставляет хэш-таблицу параметру -FilterHashTable
, которая ищет только журнал Application и с временем начиная с полуночи текущего дня возвращает результаты событий сразу после полуночи.

FilterHashTable
parameter.Сравните скорость фильтрации того же самого команды выше с использованием параметра -FilterHashTable
с фильтрацией через Where-Object
на конвейере. Как видно, команда, использующая Where-Object
, намного медленнее, чем та, которая использует параметр -FilterHashTable
.

FilterHashTable
and Where-Object
.Фильтрация журналов событий с использованием параметра FilterXPath
Записи журналов событий хранятся в виде файлов XML, и поэтому вы можете использовать язык XPath, язык запросов XML, для фильтрации записей журнала. Выполняя ту же команду, что и выше, и переводя ее в XPath, можно достичь тех же результатов.
Для создания запроса XPath используйте возможность фильтрации в Windows Event Viewer, как показано ниже.
1. Откройте Event Viewer и перейдите в журнал, например, в журнал Windows Logs → Application.

2. Затем щелкните по ссылке “Фильтр текущего журнала” в правой панели.

3. Введите параметры, которые вы хотите использовать для фильтрации журнала.

4. Щелкните по вкладке XML и скопируйте раздел, содержащийся внутри тега Select.

5. Теперь скопируйте и вставьте скопированное содержимое с параметром -FilterXPath
. Теперь вы можете видеть ниже, что используя синтаксис XPath, найденный в просмотрщике журналов событий, вы можете создать запрос для фильтрации только необходимой информации.

FilterXPath
parameter. Погружение в то, как создавать запросы XPath, выходит за рамки данной статьи, но основной формат показан ниже. Когда параметр FilterXPath
фильтрует дату, вы увидите одно большое отличие: вам нужно использовать более конкретный формат даты, yyyy-MM-ddTHH:mm:ss.fffZ
, который должен возвращаться в формате UTC, что отмечается переключателем -AsUTC
.

Фильтрация результатов журнала событий с помощью FilterXML
Наконец, последний доступный параметр фильтрации – это параметр -FilterXML
. В отличие от параметров -FilterXPath
и -FilterHashTable
, этот параметр принимает XML, который затем используется для фильтрации событий. Параметр -FilterXML
позволяет использовать более сложные правила и, как показано ниже, может воспроизводить предыдущие примеры фильтрации.
Как показано в предыдущем примере, вы можете получить предварительно отформатированный запрос из возможности Просмотр событий → Фильтр текущего журнала. Вместо того чтобы выбирать только содержимое в узле Select
, вы будете использовать весь запрос. Фактических фильтров не выбрано, как указано знаком *
в узле Select
. Это обеспечит общую разметку для следующего примера.

Вместо создания однострочной команды сначала разделите XML-запрос и присвойте разметку переменной $Query
, как показано в примере ниже. Присваивание запроса переменной обеспечивает лучшую удобство использования и читаемость. Затем передайте переменную $Query
параметру -FilterXML
команды Get-WinEvent
.
Как показано ниже, вы видите результаты более сложного запроса, возвращающего все события с того дня и сохраненные в журнале Приложение
.

FilterXML
works.Заключение
Командлет Get-WinEvent
быстро справляется с запросом нескольких источников журналов событий с мощными возможностями фильтрации. От аудита до решения проблем, командлет Get-WinEvent
является важным дополнением к арсеналу системных администраторов!