Get-WinEvent -filterXPath 停止工作

Get-WinEvent -filterXPath stopped working

我正在尝试使用 Get-WinEvent 和 XPath 进行一些事件查询。昨天下班前我测试成功了,但是今天,不管我怎么试,它一直告诉我没有匹配的事件。

我仍然使用昨天打开的 PowerShell window 查询成功,甚至通过 shell 历史重复 相同的命令 也没有返回任何内容。

我无法使用任何 XPath 查询。简单的例子,这个returns千条事件记录:

$EventFilter = @{ 
          Logname      = 'Microsoft-Windows-TaskScheduler/Operational'
          ProviderName = "Microsoft-Windows-TaskScheduler"
          Id           = 129
       }
Get-WinEvent -FilterHashtable $EventFilter -verbose

但以下说法No events were found that match the specified selection criteria.

[xml]$XPath = @"
  <QueryList>
    <Query Id="0" Path="microsoft-windows-taskscheduler/operational">
      <Select Path="microsoft-windows-taskscheduler/operational">*
        [System/Provider[@Name='microsoft-windows-taskscheduler'] and
        (System/EventID=129)]
      </Select>
    </Query>
  </QueryList>
"@
Get-WinEvent -logname 'Microsoft-Windows-TaskScheduler/Operational' -FilterXPath $XPath

注意:我没有使用无效查询。上面的 xml 只是根据第一个 -verbose 开关显示的查询(构造和)重新格式化。最后,我需要使用 XPath,因为 -FilterHashtable 太有限了,但我什至无法让简单的 XPath 查询工作。

我开始为此焦头烂额。有什么可能阻止它在以前起作用时今天起作用?

谢谢。

您在使用 ISE 吗?您是否尝试过将其关闭、打开并重新运行您的脚本?

我在 ISE 上遇到过类似的奇怪问题,它似乎不想放弃变量等,但关闭它却奏效了。

您可以使用两个不同(但相似)的参数。您正在使用的 -FilterXPath 只需要提供过滤器。所以,你的例子应该是:

$XPath = "*[System/Provider[@Name='microsoft-windows-taskscheduler'] and (System/EventID=129)]"

Get-WinEvent -logname 'Microsoft-Windows-TaskScheduler/Operational' -FilterXPath $XPath

另一种方法是使用 -FilterXml,它采用您最初拥有的完整查询 XML(但没有 -LogName 参数):

$XPath = @"
  <QueryList>
    <Query Id="0" Path="microsoft-windows-taskscheduler/operational">
      <Select Path="microsoft-windows-taskscheduler/operational">*
        [System/Provider[@Name='microsoft-windows-taskscheduler'] and
        (System/EventID=129)]
      </Select>
    </Query>
  </QueryList>
"@

Get-WinEvent -FilterXml $XPath