10

我正在尝试导出 Windows 事件日志,但不是根据数量而是根据记录事件的时间来限制导出的事件。我正在尝试在 Windows 7 及更高版本上执行此操作。到目前为止,我的工作重点是使用 wevtutil。

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

我找到了这篇文章,但首先它似乎没有在我的系统上产生任何输出(是的,我已经更改了日期和时间),其次它似乎取决于我试图避免的日期格式。

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

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

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

4

4 回答 4

14

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

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

这对我来说很好。

于 2013-04-11T07:40:29.933 回答
12

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

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

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

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

/c:1在示例中添加了仅获取​​ 1 个事件,因为过去 2 周有很多事件。

您可能还只想列出警告和错误。为此,您可以使用(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
于 2016-03-07T19:29:21.973 回答
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 ..."
于 2012-10-16T17:45:24.463 回答
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"}
于 2012-10-16T17:54:34.140 回答