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

izo*_*ica 9 windows cmd event-log windows-7 windows-server-2008-r2

我正在尝试导出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
Run Code Online (Sandbox Code Playgroud)

我不得不用实际符号替换&lt;&gt;,因为我得到了语法错误.此命令产生空输出.

Cod*_*ard 13

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

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

这对我来说很好.


miv*_*ivk 7

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

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

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

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

/c: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
Run Code Online (Sandbox Code Playgroud)


joe*_*alt 2

我不知道您对 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"}
Run Code Online (Sandbox Code Playgroud)