wevtutil简介与使用

目录

一、wevtutil简介

二、wevtutil简单使用

三、参考资料


一、wevtutil简介

        wevtutil是微软Windows eventlog有关的工具,可以用于检索有关事件日志、导出、清除、归档事件日志等。

        语法:

wevtutil [{el | enum-logs}] [{gl | get-log} <Logname> [/f:<Format>]]
[{sl | set-log} <Logname> [/e:<Enabled>] [/i:<Isolation>] [/lfn:<Logpath>] [/rt:<Retention>] [/ab:<Auto>] [/ms:<MaxSize>] [/l:<Level>] [/k:<Keywords>] [/ca:<Channel>] [/c:<Config>]]
[{ep | enum-publishers}]
[{gp | get-publisher} <Publishername> [/ge:<Metadata>] [/gm:<Message>] [/f:<Format>]] 
[{im | install-manifest} <Manifest>] [/rf:<Path>] [/mf:<Path>] [/pf:<Path>] 
[{um | uninstall-manifest} <Manifest>] [{qe | query-events} <Path> [/lf:<Logfile>] [/sq:<Structquery>] [/q:<Query>] [/bm:<Bookmark>] [/sbm:<Savebm>] [/rd:<Direction>] [/f:<Format>] [/l:<Locale>] [/c:<Count>] [/e:<Element>]]
[{gli | get-loginfo} <Logname> [/lf:<Logfile>]]
[{epl | export-log} <Path> <Exportfile> [/lf:<Logfile>] [/sq:<Structquery>] [/q:<Query>] [/ow:<Overwrite>]]
[{al | archive-log} <Logpath> [/l:<Locale>]]
[{cl | clear-log} <Logname> [/bu:<Backup>]] [/r:<Remote>] [/u:<Username>] [/p:<Password>] [/a:<Auth>] [/uni:<Unicode>]

二、wevtutil简单使用

1、列出所有的事件日志

wevtutil el

2、导出事件日志

1、导出系统事件日志到D盘 
wevtutil epl System D:\System.evtx 

2、导出应用程序事件日志到D盘 
wevtutil epl Application D:\Application.evtx

3、清除事件日志

1、清除系统事件日志 wevtutil cl System 
2、清除应用程序事件日志 wevtutil cl Application 
3、清除系统事件日志并保存到D盘内 wevtutil cl System /bu:D:\System.evtx

三、参考资料

1、wevtutil | Microsoft Learn

<think>嗯,用户想了解如何使用wevtutil查询当天的事件日志。首先,我需要回忆一下wevtutil的命令行选项,特别是如何过滤日志时间。记得wevtutil有query-log和/q参数,可以用来查询日志。但过滤时间可能需要使用过滤选项,比如使用/q加上XPath查询。 接下来,用户需要的是当天的日志,所以需要确定当天的日期范围。可能需要获取当前日期,并设置开始和结束时间。不过Windows事件日志的时间格式可能比较特别,比如是ISO 8601格式,或者某种特定的字符串格式,比如YYYY-MM-DDTHH:MM:SS。比如,当天的开始时间是00:00:00,结束时间是当前时间,或者23:59:59? 然后,构造XPath查询语句。XPath语法中,时间字段可能是TimeCreated的SystemTime属性。例如,使用*[System[TimeCreated[@SystemTime >= 'start' and @SystemTime <= 'end']]]这样的结构。需要将start和end替换成具体的日期时间值。 不过,用户可能希望仅输入当天的日志,而不需要手动输入日期。这时候可能需要动态生成当天的日期。在批处理脚本中,可以使用%date%环境变量,但格式可能因系统区域设置不同而变化,这可能导致问题。例如,英文系统和中文系统的%date%输出格式不同,可能需要处理一下。 或者,使用PowerShell来获取当前日期的正确格式,再传递给wevtutil。例如,在PowerShell中,可以获取当前日期的开始时间和结束时间,并格式化为ISO 8601格式,比如"yyyy-MM-ddTHH:mm:ss"。 另外,用户可能不知道如何组合这些命令,所以需要给出具体的示例,包括命令行和PowerShell的方法。同时需要注意权限问题,可能需要以管理员身份运行命令提示符或PowerShell才能访问某些日志。 还需要考虑日志名称,比如Application、System或Security日志,用户可能需要指定具体的日志名称。在示例中,可能需要给出使用System日志的例子,并提醒用户根据需要替换成其他日志名称。 另外,时间过滤是否包含毫秒?wevtutil的XPath是否需要包含毫秒部分?可能需要测试,通常可能不需要,但保险起见可以包括进去,比如".000Z"。 总结步骤:1.确定日志名称;2.构造时间范围;3.构建XPath查询;4.执行wevtutil命令。同时提供不同方法的示例,比如直接命令行中使用动态日期,或者使用PowerShell生成日期字符串。 可能还需要提醒用户时区的问题,因为SystemTime是UTC时间,而本地日期可能需要转换。例如,如果用户在中国时区(UTC+8),当天的00:00:00本地时间其实是前一天的16:00:00 UTC。这时候直接使用本地日期的00:00:00可能不准确。这可能会让用户困惑,因为查询结果可能不包括当天的事件。因此,可能需要将开始时间调整为UTC时间的前一日16:00,但这比较复杂。或者,使用PowerShell将本地时间转换为UTC时间,再构造查询条件。 不过,考虑到用户可能只是需要简单的方法,可能建议使用PowerShell来获取当天的UTC日期范围。例如,获取当天的开始时间和结束时间的UTC表示,然后构造XPath查询。 或者,如果用户不关心UTC时间,可以直接使用本地日期的字符串,但需要确保wevtutil接受本地时间格式。不过根据文档,TimeCreated的SystemTime属性是UTC时间,所以需要转换本地时间到UTC。 这可能会让步骤变得复杂,用户可能希望有一个简单的方法。所以可能需要提供一个折中的办法,使用当天的日期部分,忽略时间部分,比如查询SystemTime包含当天日期的日志条目,但这种方法可能不准确,因为时间部分可能跨天。 或者,考虑到用户可能只需要当天的本地日期的事件,不管UTC时间如何,可以生成当天的开始和结束的UTC时间。例如,对于北京时间(UTC+8),当天的开始时间是前一天的16:00 UTC,结束时间是当天的15:59:59 UTC。但这样处理起来比较复杂,可能需要脚本支持。 或许,可以推荐用户使用PowerShell来自动处理时间转换,生成正确的UTC时间字符串,然后构造查询命令。 最后,需要测试示例命令是否正确,确保语法正确,避免转义字符错误,比如在PowerShell中双引号内的变量替换和转义处理。</think>好的,下面分步骤说明如何使用 `wevtutil` 查询当天的事件日志: --- ### **步骤 1:理解时间格式要求** Windows 事件日志的时间属性使用 **UTC 时间**,格式为 `YYYY-MM-DDTHH:MM:SS.000Z`。例如,北京时区(UTC+8)的 `2023-10-01 08:00:00` 本地时间对应的 UTC 时间为 `2023-10-01T00:00:00.000Z`。 --- ### **步骤 2:构造查询命令** #### **方法 1:手动指定日期范围** ```cmd wevtutil qe System /q:"*[System[TimeCreated[@SystemTime>='2023-10-01T00:00:00.000Z' and @SystemTime<='2023-10-01T23:59:59.999Z']]]" /rd:true /f:text ``` - 替换 `System` 为日志名称(如 `Application`、`Security`)。 - 替换日期范围 `2023-10-01` 为实际日期。 --- #### **方法 2:动态获取当天日期(PowerShell脚本)** ```powershell # 获取当天日期范围(UTC时间) $TodayStart = (Get-Date -Hour 0 -Minute 0 -Second 0).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.000Z") $TodayEnd = (Get-Date -Hour 23 -Minute 59 -Second 59).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.999Z") # 执行查询 wevtutil qe System /q:"*[System[TimeCreated[@SystemTime>='$TodayStart' and @SystemTime<='$TodayEnd']]]" /rd:true /f:text ``` --- ### **参数说明** | 参数 | 作用 | |------|------| | `qe` | 查询日志事件 | | `System` | 日志名称(可替换为 `Application`、`Security` 等) | | `/q:"..."` | XPath 查询条件 | | `/rd:true` | 按时间倒序排列(最新事件在前) | | `/f:text` | 输出格式为纯文本 | --- ### **注意事项** 1. **管理员权限**:需以管理员身份运行命令提示符或 PowerShell。 2. **时区问题**:脚本已自动转换本地时间为 UTC 时间。 3. **日志大小限制**:如果当天日志过多,可添加 `/c:100` 限制输出条目数(如仅显示 100 条)。 --- ### **示例输出** ``` Event[0]: Log Name: System Source: Microsoft-Windows-Kernel-General Time Created: 2023-10-01T08:15:00.000Z Event ID: 12 Level: Information Message: 系统时间已更新。 ``` --- 通过以上方法,可精准筛选出当天的事件日志。如果需要更复杂的过滤(如按事件ID),可在 XPath 条件中添加 `EventID=1234` 参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值