查询过去两周的Windows事件日志

时间:2012-10-16 13:43:39

标签: windows windows-7 cmd windows-server-2008-r2 event-log

我正在尝试导出Windows事件日志,但是不是根据数量限制导出的事件,而是根据事件记录的时间限制。我试图在Windows 7和更新版本上这样做。到目前为止,我的工作重点是使用wevtutil。

我正在使用wevtutil,我的命令行现在是:wevtutil Application events.evtx这里的问题是我导出了整个日志,这可能非常大,所以我想将它限制在最近两周。

我发现了this帖子,但首先它似乎没有在我的系统上产生任何输出(是的,我已经更改了日期和时间),其次它似乎依赖于我的日期格式尽量避免。

这是我运行的修改过的命令:

wevtutil qe Application "/q:*[System[TimeCreated[@SystemTime>='2012-10-02T00:00:00' and @SystemTime<'2012-10-17T00:00:00']]]" /f:text

我必须用实际符号替换&lt;&gt;,否则会出现语法错误。此命令产生空输出。

4 个答案:

答案 0 :(得分:13)

问题是由于/ q:在引号内。它应该在外面,如:

wevtutil qe Application /q:"*[System[TimeCreated[@SystemTime>='2012-10-02T00:00:00' and @SystemTime<'2012-10-17T00:00:00']]]" /f:text

这对我来说很好。

答案 1 :(得分:7)

对于过去两周的事件,您还可以使用timediff,以避免硬编码日期。

Windows使用毫秒,因此它将是1000 * 86400(秒,= 1天)* 14(天)= 1209600000。

对于您的查询,这看起来像

wevtutil qe Application /q:"*[System[TimeCreated[timediff(@SystemTime) <= 1209600000]]]" /f:text /c:1

我添加/c:1只能在示例中获得1个事件,因为过去两周内发生了很多事件。

您可能还希望仅列出警告和错误。为此,您可以使用(Level=2 or Level=3)。 (出于某种原因,Level<4似乎在Win7上对我不起作用)

wevtutil qe Application /q:"*[System[(Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 1209600000]]]" /f:text /c:1

答案 2 :(得分:2)

我强烈建议您使用LogParser执行此类任务:

logparser -i:evt file:query.sql

query.sql包含以下内容:

SELECT
  TimeGenerated,EventID,SourceName,Message
FROM Application
WHERE TimeGenerated > TO_TIMESTAMP(SUB(TO_INT(SYSTEM_TIMESTAMP()), 1209600))
ORDER BY TimeGenerated DESC

稍微不直观的日期计算会将系统时间(SYSTEM_TIMESTAMP())转换为整数(TO_INT()),减去1209600秒(60 * 60 * 24 * 14 = 2周)并将结果转换回来到时间戳(TO_TIMESTAMP()),从而产生2周前的日期。

您可以通过使用MUL(86400, $days)替换固定秒数并将命令行更改为此来参数化时间跨度:

logparser -i:evt file:query.sql+days=14

您也可以直接将查询传递给logparser:

logparser -i:evt "SELECT TimeGenerate,EventID,SourceName,Message FROM ..."

答案 3 :(得分:1)

我不知道您对PowerShell的看法,但它可以在您标记的所有系统上使用。

在powershell提示符下,有关详细信息,请参阅Get-Help Get-EventLog -Examples。

如果必须从.cmd或.bat文件执行此操作,则可以调用powershell.exe -File powershell_script_file_name

其中powershell_script_file_name包含您需要的Get-EventLog命令。

此示例提供了所有安全事件日志失败,我用于审计系统:

Get-EventLog -LogName security -newest 1000 | where {$_.entryType -match "Failure"}