Powershell – системные журналы и особенности фильтров по времени


Какое время и в каком формате использовать, если вы хотите получить события из системного журнала за определенное время? Есть небольшой сюрприз…

Читать далее

Powershell – производительность работы с системными журналами


На днях попытался работать с системными журналами из Powershell с помощью командлета Get-WinEvent. На больших журналах работает медленно. Всё относительно конечно. Средняя скорость обработки 200 событий в секунду: для журнала с несколькими сотнями тысяч записей время выполнения командлета состовляет уже десятки минут. При этом полностью занято одно ядро системы.

Такое время обработки и такое потребление процессорного времени меня не устроило, и я решил поискать другой путь, не погружаясь дебри низкоуровневых API.

Оказывается хорошей производительностью обладает утилита wevtutil.exe

Она не только может настраивать журналы, но и экспортировать содержимое в отдельный файл и даже выполнять запросы с выводом результатов в текстовом виде или формате XML.

Как и любую утилиту, её можно вызвать из Powershell и обрабатывать её вывод в конвейере.

Правда обнаружилась проблема с локализацией строковых значений (если некоторые атрибуты события на русском), но это решаемо: например, можно записать вывод утилиты wevtutil в файл командлетом Out-File с параметром Encoding и значением OEM.