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


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

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

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

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

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

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

Реклама

комментария 4

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: