Converta arquivos evtx salvos em texto

2

Estou procurando exportar uma grande quantidade de arquivos de log de segurança (.evtx) salvos para texto ou formato CSV. Eu encontrei wevtutil mas isso só parece ser capaz de converter .evt para .evtx quando se lida com arquivos de log salvos:

wevtutil epl c:\logs\seclog.evtx c:\logs\seclog.txt /lf:true

O arquivo é criado como seclog.txt, mas está no formato .evtx.

É possível converter em texto ou existe outra maneira de converter os arquivos em texto rapidamente? Eu tentei com o Powershell, mas demora muito.

Editar: examinei o Log Parser e ele parece rápido, mas não exporta o campo de descrição corretamente:

The description for Event ID xxx in Source "Microsoft-Windows-xxxx" cannot be found. The local computer may not have the...
    
por smwk 13.06.2016 / 20:52

2 respostas

2

No final, eu fui com o Log Parser para converter para CSV e, em seguida, [System.IO.File] :: ReadLines ($ filename) para pesquisar o texto. Um arquivo .evtx de 800MB pode ser convertido em cerca de 2 min 30 seg e, em seguida, a leitura do arquivo leva cerca de 2 minutos. Possivelmente, pode ser mais rápido exportar para XML ou para um banco de dados, mas isso será suficiente para mim com a quantidade de tempo que eu passei.

$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
    
por 14.06.2016 / 18:44
0

Tanto quanto me lembro, o LogParser não conseguiu extrair todas as informações do evento (quero dizer, System e EventData, que você pode ver na visualização xml de cada evento no EventViewer). Portanto, fui com o powershell. Meu script funciona bem, mas é muito lento: ele precisa de cerca de 80 segundos para converter arquivo .evtx 10 Mb ...

$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()
    
por 07.07.2016 / 10:38