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

请帮忙。

您可以使用XPath进行特定事件查询,并使用许多事件工具(Event MMC,Powershell和Wevtutil)。 在其他情况下,我很喜欢XML结构,SCOMpipe理包,HTML等,但是我发现XPath有点难度。 有几点需要记住的是:

  1. 您需要使用“世界时”进行查询,因为这是事件子系统logging时间的方式。 时间还需要格式化为可sorting的ISO 8601,如2016-01-10T18:47:34
  2. 你需要围绕查询的单引号的时间,也逃避那些报价的PowerShell,因为PowerShell将未转义的单引号内的东西作为文字,这意味着单引号内的variables不会扩大,除非转义。
  3. 其他时候我用XPath,它需要比&gt;更大/更小的值。 /&lt; 但在这里,这是行不通的。 只有实际的<<符号工作。
  4. Xpath查询的开始部分包含“System”,这不是指事件日志types,而是指事件XML的System分支(下图为应用程序日志中的事件的屏幕截图)

样品

 $time1 = ((get-date).toUniversalTime()).addHours(-22) $time2 = ((get-date).toUniversalTime()).addHours(-24) $newest = get-date($time1) -fs $oldest = get-date($time2) -fs $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 } 

eventXML