在一个查询中提取应用程序和系统事件日志

Pulling Application and system event log in one query

我想用一个简单的查询来搜索事件日志,而不是经历同样的考验两次。我只想在事件日志中搜索应用程序警告和错误以及系统日志。我目前有它 运行,但如果可能的话,我想查询一下。

$Date = (Get-Date).AddDays(-4)
$ApplicationEvents = Get-WinEvent -ComputerName $TestHostTemp -FilterHashtable @{logname='application'; StartTime=$Date; level=2,3}
$SystemEvents = Get-WinEvent -ComputerName $TestHostTemp -FilterHashtable @{logname='System'; StartTime=$Date; level=2,3}

我更愿意做这样的事情,但不知道放入它的上下文。

$Date = (Get-Date).AddDays(-4)
$ApplicationEvents = Get-WinEvent -ComputerName $TestHostTemp -FilterHashtable @{logname='application','System'; StartTime=$Date; level=2,3}

正如@zett42 指出的那样,OP 所需的查询工作正常。您可以为要查询的日志指定一个字符串数组而不会出现问题。我在这里留下我的答案,以防有人可以从中学习用于其他目的。

可以,但您需要使用 -FilterXml 参数。您可以做的是在事件查看器中设置自定义视图,然后单击 XML 选项卡并从那里复制内容。在 PowerShell 中获得 XML 后,您可以根据需要对其进行修改。基本上是这样的:

$StartTime = [datetime]::Today.AddDays(-4).ToUniversalTime().Tostring('yyyy-MM-ddThh:mm:ss.000Z')
$Filter = @"
<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[(Level=2 or Level=3) and TimeCreated[@SystemTime&gt;='$StartTime']]]</Select>
    <Select Path="System">*[System[(Level=2 or Level=3) and TimeCreated[@SystemTime&gt;='$StartTime']]]</Select>
  </Query>
</QueryList>
"@
$Events= Get-Winevent -FilterXml $Filter

适合我。您要按日志名而不是提供商名对其进行分组吗?

$Date = (Get-Date).AddDays(-4)
Get-WinEvent @{logname='application','System'; StartTime=$Date; level=2,3} | 
  format-table -GroupBy logname