AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 783708
Accepted
smwk
smwk
Asked: 2016-06-14 10:52:58 +0800 CST2016-06-14 10:52:58 +0800 CST 2016-06-14 10:52:58 +0800 CST

将保存的 evtx 文件转换为文本

  • 772

我希望将大量保存的安全日志文件 (.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...
windows-event-log windows-server-2008-r2 wevtutil
  • 4 4 个回答
  • 13990 Views

4 个回答

  • Voted
  1. Best Answer
    smwk
    2016-06-15T08:44:21+08:002016-06-15T08:44:21+08:00

    最后,我使用 Log Parser 转换为 CSV,然后 [System.IO.File]::ReadLines($filename) 搜索文本。一个 800MB 的 .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
    
    • 2
  2. Andrey Sapegin
    2016-07-08T00:38:16+08:002016-07-08T00:38:16+08:00

    据我记得,LogParser 无法提取所有事件信息(我的意思是系统和 EventData,您可以在 EventViewer 中的每个事件的 xml 视图中看到)。因此,我选择了 powershell。我的脚本运行良好,但速度很慢:转换 10 Mb .evtx 文件大约需要 80 秒...

    $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()
    
    • 0
  3. Dan H.
    2021-10-20T19:51:27+08:002021-10-20T19:51:27+08:00

    我需要将一堆 .evtx 批量转换为 .txt 文件 - 我最终让 Log Parser 转换为 .csv(然后我可以将其重命名为 .txt),但最简单的方法(并且只使用本机 Windows 工具)是使用wevtutil.

    wevtutil /qe File.evtx /lf: true 将在 cmd 中打开并显示 .evtx 文件。您所要做的就是让它以 .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
    
    • 0
  4. Jason
    2021-11-09T07:45:04+08:002021-11-09T07:45:04+08:00

    如果您正在寻找一种点击式的方式来转换 EVTX 文件,您可以尝试 Gigasheet。这是一个基于 Web 的应用程序,可以解析 EVTX,您可以以 CSV 格式导出数据。您最多可以同时上传 99 个文件,并且可以免费上传最大 10GB 的文件。

    此处的完整详细信息: https ://www.gigasheet.co/post/online-evtx-parser-and-viewer

    我们在 Gigasheet 中的解析基于 @omerbenamram 的 Rust EVTX 解析器。查看 Github 上的基准测试,看起来性能对于大多数应用程序来说都应该不错:https ://github.com/omerbenamram/evtx

    全面披露:我是 Gigasheet 的联合创始人。

    • 0

相关问题

  • 好的 Windows 事件日志分析/报告工具?

  • 如何从 Windows Server 2008 的事件日志中删除特定事件?

  • Windows 无法访问 GPO CN={31B2F340-016D-11D2-945F-00C04FB984F9} 的文件 gpt.ini

  • 关于事件变量的 Server 2008 电子邮件

  • 有没有办法在 LAN 上的所有事件日志中搜索特定事件?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve