Wevtutil 相当于 powershell 脚本来获取事件日志

Wevtutil 相当于 powershell 脚本来获取事件日志

我制作了一个如下所示的 powershell 脚本,但由于我无法将其保存为 .evtx 格式。我想要相同的 wevtutil 等效程序(使用 wevtutil epl)。请帮忙!

$ErrorTime=Get-WinEvent -FilterHashtable @{
  Logname      = 'Application'
  ID           = 1000
  ProviderName = 'Application Error'
} -MaxEvents 1 | select Select-Object -Expand TimeCreated

$Start_Time = ($ErrorTime).addhours(-2)
$End_Time = ($ErrorTime).addhours(2)

Get-WinEvent -FilterHashtable @{
     Logname='Application','System','Security' 'Setup' 
     StartTime=$Start_Time
     EndTime =$End_Time}

只是告诉您脚本正在做什么。它获取上次发生应用程序错误 1000 的时间戳,在该时间戳上加减两个小时,然后在这两个时间之间查询应用程序系统安全性和设置。

我需要这样的东西

wevtutil epl 应用程序,其中时间 >= $Start_Time 且时间 <= $End_Time

请帮忙。

答案1

您可以使用 XPath 进行特定事件查询,并借助许多事件工具(Event MMC、Powershell 和 Wevtutil)。在其他情况下,我熟悉 XML 结构、SCOM 管理包、HTML 等,但我发现 XPath 有点难以做到恰到好处。需要记住的几点是:

  1. 您需要使用世界时间进行查询,因为这是事件子系统记录时间的方式。时间也需要格式化为可排序的 ISO 8601,例如2016-01-10T18:47:34
  2. 您需要将查询的时间括在单引号中,并且还需要为 powershell 转义这些引号,因为 powershell 将未转义的单引号内的内容视为文字,这意味着除非转义,否则单引号内的变量不会被扩展。
  3. 其他时候我使用 XPath,它需要大于/小于,如 > ; / < ; 但在这里不起作用。只有实际的 > < 符号才有效。
  4. Xpath 查询的开头包含“System”,这并不指事件日志类型,而是指事件 XML 的系统分支(下面的屏幕截图为来自应用程序日志的事件)

样本

$time1 = ((get-date).toUniversalTime()).addHours(-22)
$time2 = ((get-date).toUniversalTime()).addHours(-24)
$newest = get-date($time1) -f s
$oldest = get-date($time2) -f s
$newest
$oldest
foreach ($logName in "Application Security System Setup".split(" ")) {
    WEVTUTIL.EXE EPL $logName "C:\temp\my$logName.evtx" "/q:*[System[TimeCreated[@SystemTime<=`'$newest`' and @SystemTime>=`'$oldest`']]]" /ow:true
}

事件XML

相关内容