如何导出Windows事件日志(EVTX)

如何导出Windows事件日志(EVTX)

SOC Prime Team
SOC Prime Team linkedin icon 关注

简短答复:打开事件查看器,右键单击您需要的日志(例如 Windows 日志 → 安全),选择 将所有事件另存为…,并保留 .evtx 格式。在提升权限的命令提示符下,这相当于一个命令:wevtutil epl Security C:logssecurity.evtx。不要使用资源管理器从 C:WindowsSystem32winevtLogs 中复制出文件。事件日志服务会保持它们的打开状态,因此通常您会遇到错误或无法使用的内容。

与文本导出相比,EVTX 值得多花一分钟。这是本地格式,因此每个字段、记录 ID 和准确的 UTC 时间戳都能保存下来。一个 SIEM 无法为您找回这些数据,因为它只存储呈现的文本。Prime Core 拥有 11,632 条适用于 Windows 事件日志的西格码规则,映射到 643 个 MITRE ATT&CK 技术,范围包括密码猜测 (T1110)、恶意服务 (T1543.003) 到攻击者清除日志记录 (T1070.001)。以下是导出正确日志、清理并免费在 LogTotal 中调查它们的方法。

免费开始

简而言之

路线 使用时间 您需要的
事件查看器 → 将所有事件另存为 一台机器,一个或两个日志,您有桌面会话 管理员权限,或大部分日志的事件日志读取者
wevtutil epl 您希望进行过滤导出、脚本或无 GUI 的服务器 提升的提示
wevtutil 带 /r: 或 PowerShell 循环 多个日志,或远程机器 目标机器上的管理员权限,加上通过防火墙的远程事件日志访问

在您开始之前

三件事情决定导出是否包含您希望的内容。

权限。 管理员可以导出任何日志。本地事件日志读取者组的成员可以读取大多数日志,而无需完整管理权限。对于安全日志,使用提升的提示符是可靠的选择。详情请参阅我们的【Windows 事件日志权限指南】。

审核策略。 Windows 仅记录对其下达的指示。默认情况下,不审计进程创建(事件 4688)。即使启用了,命令行也只有在启用了一项单独的策略时才会被记录。检查您正在查找的事件是否从未写入:

auditpol /get /category:*

日志大小及覆盖。 每个日志都有最大大小。默认情况下,Windows 一旦日志满,就会覆盖最旧的事件,在繁忙的服务器或域控制器上,这可能意味着只有几个小时的历史记录。查看您正在处理的内容:

wevtutil gl Security

查看 maxSize 和 retention。如果攻击发生在日志中最旧事件之前,那就不在其中。请检查您的 SIEM 或转发事件。

以及常规提醒:事件日志充满了用户名、主机名和 IP 地址。LogTotal 会对上传内容进行清理,但您的数据处理政策仍适用。

要导出哪些日志

“Windows 日志”是现代系统上的几百个频道。对于安全工作,这些通常包含故事:

日志(频道名称) 它为您提供了什么 备注
安全 登录 (4624, 4625),账户更改 (4720, 4728),日志被清除 (1102),进程创建 (4688) 4688 仅在审计开启时
系统 新服务 (7045),服务变更 (7036),系统日志被清除 (104)
Microsoft-Windows-Sysmon/Operational 带哈希和命令行的进程创建、网络连接等 仅在安装 Sysmon 时
Microsoft-Windows-PowerShell/Operational 脚本块日志记录 (4104),实际运行的代码 仅在启用脚本块记录时
Microsoft-Windows-Windows Defender/Operational 检测 (1116) 和采取的行动 (1117)
Microsoft-Windows-TaskScheduler/Operational 新的计划任务 (106),一个常见的持久性技巧
Microsoft-Windows-TerminalServices-LocalSessionManager/Operational RDP 会话登录、断开、重新连接 (21, 24, 25)

不确定机器上有什么?wevtutil el 列出每个频道。通过 findstr /i sysmon(或您要查找的内容)来过滤特定的一个。

选项 1:事件查看器

最适合单台机器和几个日志。

  1. 按 Win+R,输入 eventvwr.msc,并以管理员身份运行。
  2. 找到日志。经典日志在 Windows 日志下。其他均位于 应用程序和服务日志 → Microsoft → Windows下。例如,Sysmon 位于 …WindowsSysmonOperational。
  3. 右键单击日志并选择 将所有事件另存为…
  4. 保留 事件文件 (*.evtx) 为类型,并给文件命名以说明其性质,例如 dc-01_security_2026-10-20.evtx。
  5. Windows 然后会询问显示信息。这决定了是否在文件旁边保存含有消息文本的 LocaleMetaData 文件夹,这有助于当某人在另一台机器上用事件查看器打开时。对于 LogTotal 上传,.evtx 文件是关键。

只需要部分日志?使用 筛选当前日志… 首先(事件 ID、时间范围),然后 将筛选后的日志文件另存为…。 XML 过滤器对话框的选项卡会显示所构建的确切 XPath 查询。复制它;稍后在 wevtutil 中您会需要它。

选项 2:从命令行使用 wevtutil

wevtutil 随每个您可能遇到的 Windows 版本一起提供。它可以在没有 GUI 的情况下运行,并在导出时进行筛选。从提升权限的提示符运行它。

整个日志:

mkdir C:logs
wevtutil epl Security C:logsdc-01_security.evtx

仅最近 24 小时(日为毫秒):

wevtutil epl Security C:logsdc-01_security_24h.evtx /q:”*[System[TimeCreated[timediff(@SystemTime) <= 86400000]]]”

准确的时间窗口,以 UTC 表示:

wevtutil epl Security C:logsdc-01_security_1019.evtx /q:”*[System[TimeCreated[@SystemTime>=’2026-10-19T00:00:00.000Z’ and @SystemTime<‘2026-10-20T00:00:00.000Z’]]]”

仅成功和失败的登录:

wevtutil epl Security C:logsdc-01_logons.evtx /q:”*[System[(EventID=4624 or EventID=4625)]]”

带空格的频道名称需要引号:

wevtutil epl “Microsoft-Windows-Windows Defender/Operational” C:logsdefender.evtx

如果目标文件已经存在,wevtutil 会拒绝覆盖,除非您添加 /ow:true。手动编写 XPath 很快会变得乏味。在事件查看器中构建过滤器并从 XML 选项卡复制查询,如上所述。

在域控制器上进行筛选。从繁忙的 DC 上未筛选过的安全导出可能达到千兆字节,而您将上传大部分无用的数据。

选项 3:多个日志或远程机器

为了进行筛选,您通常希望从每个主机获取相同的几组日志。此 PowerShell 片段将它们导出到每台机器一个文件夹中,并跳过任何不存在的频道(例如没有 Sysmon),而不是失败:

$out = “C:logs$env:COMPUTERNAME”
New-Item -ItemType Directory -Force -Path $out | Out-Null

$logs = ‘Security’, ‘System’,
        ‘Microsoft-Windows-Sysmon/Operational’,
        ‘Microsoft-Windows-PowerShell/Operational’,
        ‘Microsoft-Windows-Windows Defender/Operational’,
        ‘Microsoft-Windows-TaskScheduler/Operational’

foreach ($l in $logs) {
    $file = Join-Path $out (($l -replace ‘[\/ ]’, ‘_’) + ‘.evtx’)
    wevtutil epl $l $file /ow:true 2>$null
    if ($LASTEXITCODE -ne 0) { Write-Warning “Skipped: $l” }
}

远程机器。 wevtutil 接受 /r:<computer>,但有一个问题大家发现得很辛苦:导出文件写在 远程 机器的磁盘上,不是您的。计划之后取回它:

wevtutil epl Security C:logssrv-01_security.evtx /r:srv-01
copy \srv-01C$logssrv-01_security.evtx .

这需要在目标上有管理员权限和 远程事件日志管理 防火墙规则在那里开启。如果这些规则关闭且您不想触碰它们,PowerShell 远程也能完成相同的工作:通过 Invoke-Command 运行上面的代码段,然后用 Copy-Item -FromSession 拉回文件。

在 LogTotal 中上传并查看

LogTotal 本地读取 EVTX,无需转换。这是 SOC Prime 的免费的用于在没有进行任何设置的情况下对日志文件运行检测逻辑的服务。

  1. 上传。 打开 logtotal.com 并放入 .evtx 文件。
  2. 查看。

当出问题时

症状 可能原因 Fix
拒绝访问 提示未提升,或账户缺少访问该日志的权限 以管理员身份运行
找不到指定的频道 频道名称拼写错误,或组件未安装(Sysmon 是常见例) 使用 wevtutil el | findstr /i <name> 检查
wevtutil 抱怨文件已存在 默认不覆盖 添加 /ow:true,或选择新文件名
指定的查询无效 XPath 引用或语法错误 在事件查看器中构建过滤器并从 XML 选项卡复制
从 winevtLogs 复制失败,显示“由另一个进程使用” 事件日志服务持有实时文件 使用事件查看器或 wevtutil 导出
根本没有 4625 或 4688 事件 该类别未被审计 检查 auditpol /get /category:*;这只修复将来的事件,不包括过去的事件
日志只回溯几个小时 日志已满且正在覆盖 检查 wevtutil gl Security;查看 Archive-Security-*.evtx 文件是否已开启归档
使用 /r: 出现 RPC 服务器不可用 远程事件日志管理防火墙规则关闭 在目标上启用它们,或使用 PowerShell 远程
远程导出“成功”,但没有文件 /r: 写入文件到远程机器 查看目标磁盘,例如 \srv-01C$logs

FAQ

EVTX 文件存储在哪个磁盘位置?

在 C:WindowsSystem32winevtLogs,每个频道一个文件。包含斜杠的频道名称在文件名中编码,因此 Microsoft-Windows-Sysmon/Operational 变成 Microsoft-Windows-Sysmon%4Operational.evtx。您可以读取该文件夹,但通过事件查看器或 wevtutil 导出而不是复制实时文件。

我可以从无法启动的机器上获取日志吗?

可以,这是一个情况下复制是可行的。将磁盘挂载到另一个系统上,或从外部环境启动。在 Windows 未运行情况下,没有什么会持有这些文件,您可以直接从 WindowsSystem32winevtLogs 中复制出来。

我应该保存为 EVTX、XML 还是文本?

EVTX。事件查看器提供其它格式,但它们会丢失结构或使文件膨胀。EVTX 保留每个字段,并且是 LogTotal 本地读取的格式。

我的日志可以追溯多久?

取决于日志的最大大小,无法额外延长。wevtutil gl 显示大小和保留设置。在事件查看器中按日期排序并查看最旧的事件。如果太近而没有用,建议下次增加大小,更好的是,转发事件到 SIEM。

将事件日志上传到在线工具是否安全?

LogTotal 在分析前会清理上传内容且不保留文件。

加入 SOC Prime 的 Detection as Code 平台 以提高对与您的业务最相关的威胁的可见性。为了帮助您开始并带来即时价值,现在与 SOC Prime 专家预约会议。