На днях попытался работать с системными журналами из Powershell с помощью командлета Get-WinEvent. На больших журналах работает медленно. Всё относительно конечно. Средняя скорость обработки 200 событий в секунду: для журнала с несколькими сотнями тысяч записей время выполнения командлета состовляет уже десятки минут. При этом полностью занято одно ядро системы.
Такое время обработки и такое потребление процессорного времени меня не устроило, и я решил поискать другой путь, не погружаясь дебри низкоуровневых API.
Оказывается хорошей производительностью обладает утилита wevtutil.exe
Она не только может настраивать журналы, но и экспортировать содержимое в отдельный файл и даже выполнять запросы с выводом результатов в текстовом виде или формате XML.
Как и любую утилиту, её можно вызвать из Powershell и обрабатывать её вывод в конвейере.
Правда обнаружилась проблема с локализацией строковых значений (если некоторые атрибуты события на русском), но это решаемо: например, можно записать вывод утилиты wevtutil в файл командлетом Out-File с параметром Encoding и значением OEM.
Filed under: Powershell, Windows | Tagged: eventlog, Powershell, wevtutil, Windows | 4 комментария »