Get-WinEvent -filterXPath停止工作

时间:2018-04-17 13:30:38

标签: windows powershell xpath event-log

我正在尝试使用Get-WinEvent和XPath进行一些事件查询。我在昨天离开工作之前成功地测试了它,但今天,无论我尝试什么,它一直告诉我没有匹配的事件。

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

我无法使用任何XPath查询。简单的例子,这将返回数以千计的事件记录:

$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查询起作用。

我开始把头发拉出来了。什么可能阻止它在今天工作之前工作?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用两种不同(但相似)的参数。您使用的-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

答案 1 :(得分:0)

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

我和ISE有类似的奇怪问题,似乎它不想放弃变量等等,并将其关闭。