Конвертировать сохраненные файлы evtx в текст
Я хочу экспортировать большое количество сохраненных файлов журнала безопасности (.evtx) в текстовый или CSV-формат. Я обнаружил, что wevtutil может конвертировать.evt в.evtx только при работе с сохраненными файлами журнала:
wevtutil epl c:\logs\seclog.evtx c:\logs\seclog.txt /lf:true
Файл создается как seclog.txt, но в формате.evtx.
Можно ли конвертировать в текст или есть другой способ конвертировать файлы в текст так быстро? Я пробовал с Powershell, но это занимает слишком много времени.
Редактировать: Я посмотрел в Log Parser, и он также кажется быстрым, но он не экспортирует поле описания правильно:
The description for Event ID xxx in Source "Microsoft-Windows-xxxx" cannot be found. The local computer may not have the...
4 ответа
В конце я пошел с Log Parser для преобразования в CSV и затем [System.IO.File]::ReadLines($filename) для поиска по тексту. 800-мегабайтный файл.evtx можно преобразовать примерно за 2 минуты 30 секунд, а затем чтение файла займет около 2 минут. Возможно, это может быть более быстрый экспорт в XML или в базу данных, но это поможет мне с количеством времени, которое мне пришлось потратить.
$logparser = "c:\program files (x86)\Log Parser 2.2\logparser.exe"
$query = "SELECT * INTO c:\logs\logs.csv FROM c:\logs\logs.evtx"
& $logparser -i:evt -o:csv $query
Насколько я помню, LogParser не смог извлечь всю информацию о событиях (я имею в виду и System, и EventData, которые вы можете видеть в представлении xml для каждого события в EventViewer). Поэтому я пошел с PowerShell. Мой скрипт работает хорошо, но очень медленно: ему нужно около 80 секунд, чтобы преобразовать файл размером 10 Мб.evtx...
$a = Get-Item *.evtx
$output_file = [System.IO.StreamWriter] $("all.csv")
foreach($file in $a){
$events = get-winevent -path $file.FullName
foreach ($Event in $events) {
$xml = [xml]($Event.ToXml())
foreach ($s in $xml.Event.System.ChildNodes) {
$output_file.Write($s.Name + ":" + $s.InnerText + ",")
}
foreach ($d in $xml.Event.EventData.Data) {
$text = $d.InnerText
$text = if ($text) { $text.replace("`n","") } else { $text }
$output_file.Write($d.Name + ":" + $text + ",")
}
$output_file.WriteLine()
}
}
$output_file.Flush()
$output_file.Close()
Мне нужно было массово преобразовать кучу файлов .evtx в .txt. В конечном итоге я получил Log Parser для преобразования в .csv (который затем я могу переименовать в .txt), но самый простой способ (и использует только собственные инструменты Windows) был использовать .
wevtutil /qe File.evtx /lf: true
откроет и отобразит файл .evtx в cmd. Все, что вам нужно сделать, это заставить его выводить результат в формате .txt!
wevtutil /qe File.evtx /lf: true > File.txt
Я создал пакетный скрипт, который будет рекурсивно проверять папку на наличие всех ваших датированных файлов событий и конвертировать каждый файл .evtx в файл .txt внутри этой папки:
set spath=\\SERVER\Share\Audits
set eventLogDir="dir /B /s %spath% | findstr \.evtx$"
FOR /F %%d in ('%eventLogDir%') do wevtutil qe %%d /lf:true > %%d.txt
Изменить. Я понял, что вывод запроса изwevtutil
читать не очень приятно. Используя вместо этого Log Parser с моим сценарием, я смог получить более приятный результат и сохранить его с помощью .txt.
set spath=\\SERVER\Share\Audits
set eventLogDir="dir /B /s %spath% | findstr \.evtx$"
FOR /F %%d in ('%eventLogDir%') do "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "Select * into %%d.txt from %%d" -i:evt -o:csv
Если вы ищете способ конвертировать файлы EVTX «укажи и щелкни», вы можете попробовать Gigasheet. Это веб-приложение, которое анализирует EVTX, и вы можете экспортировать данные в формат CSV. Вы можете загружать до 99 файлов одновременно, а файлы размером до 10 ГБ можно загружать бесплатно.
Полная информация здесь:https://www.gigasheet.co/post/online-evtx-parser-and-viewer
Наш анализ в Gigasheet основан на парсере Rust EVTX от @omerbenamram. Судя по тестам на Github, производительность должна быть отличной для большинства приложений: https://github.com/omerbenamram/evtx .
Полное раскрытие: я соучредитель Gigasheet.