Для проверки журналов Windows обычно используется графическая консоль Event Viewer (Eventvwr.msc).
Event Viewer предоставляет информацию о большинстве системных событий и событий безопасности.
Вы можете использовать PowerShell для поиска, фильтрации и разбора большого количества событий в Event Viewer.
В Windows есть две встроенные команды PowerShell для получения информации из журналов Event Viewer:
- Get-Eventlog – простая, удобная и быстрая команда для получения информации из стандартных журналов Windows: Application, Security, System. Однако ее нельзя использовать для получения событий из расширенных журналов приложений и служб в Event Viewer;
- Get-WinEvent – обеспечивает более универсальный способ поиска и фильтрации событий в любом из журналов, доступных в Event Viewer. В современных версиях Windows эта команда является предпочтительным способом получения и обработки журналов событий.
Чтобы получить имена доступных журналов Windows, выполните команду:
По умолчанию в Windows 10 и 11 существует более 400 журналов событий.
Каждый журнал хранится в отдельном файле .EVTX в каталоге %SystemRoot%\System32\Winevt\Logs\.
Чтобы отобразить последние 10 событий из определенного журнала, укажите имя журнала в параметре -LogName, а затем выполните команду:
Команду Where-Object можно использовать для фильтрации полученных событий по заданным критериям.
Например, вам нужно найти все события Windows Defender с идентификатором события 1002:
Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational'| Where-Object ID -eq 1002
Однако если у вас большое количество событий, такой способ фильтрации будет очень медленным.
Для более быстрого поиска в журнале можно использовать следующие фильтры Get-WinEvent:
- -FilterXPath <String>
- -FilterXml <XmlDocument>
- -FilterHashtable <Hashtable[]>
Например, чтобы получить те же результаты, что и в предыдущей команде, можно использовать следующий запрос к хэш-таблице
Эта команда поиска в журнале во много раз быстрее, чем предыдущая (с фильтрацией по Where-Object).
Пример хэш-таблицы для поиска нескольких идентификаторов событий за последние 7 дней:
Вы можете создать шаблон фильтра XPath для выбора событий из журнала с помощью графической оснастки Event Viewer.
- Щелкните правой кнопкой мыши нужное имя журнала и выберите Filter Current Log (Фильтр текущего журнала);
- Настройте параметры фильтра;
Перейдите на вкладку XML.
Скопируйте код запроса XPath, который будет создан;
Вставьте этот код в переменную $xmlQuery, чтобы запустить этот запрос с помощью PowerShell:
Используйте XML-запрос для выбора событий:
Теперь вы можете экспортировать найденные события в CSV-файл:
Можно получить журналы с удаленного компьютера с помощью параметра -ComputerName.
Например, следующий скрипт PowerShell можно использовать для поиска контроллеров домена для событий блокировки учетных записей пользователей AD (идентификатор события 4740):
см. также:
- 👥 Как создать быстрый кравлер веб-сайтов на PowerShell
- Cертификаты, Windows и немного PowerShell
- 🔐 Как установить сервер OpenSSH на Windows с помощью PowerShell
- 👥 Как отключить учетную запись Active Directory с помощью PowerShell?
- 📦 ThreatHunt: репозиторий PowerShell для обучения навыкам поиска угроз
- 👥 Adaudit – скрипт Powershell для автоматизации аудита доменов
- 📜 exe2powershell – Как конвертировать файлы EXE в BAT
- 🔍 pOSINT: открытый анализ и разведка с помощью PowerShell
- ⚙️ WINSpect – инструментарий аудита безопасности Windows на основе Powershell