事件日志的 XML 查询不起作用

事件日志的 XML 查询不起作用

我一直在寻找一个查询来充当任务计划程序中的触发器。如果 RASClient 因任何原因(代码 631(用户关闭了端口))结束(EventID 20226),我想重新启动我的 VPN

我找到了 Presser 提供的查询

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226)]] and *[EventData[Data[4]='829' or '629']]</Select>
  </Query>
</QueryList>

虽然它找到了终止(20226),但它只找到了由代码 829 或 629 导致的终止。但是,可能的错误代码有几十种,将每个错误代码都用“或”链接起来会使这个模型变得难以操作。

我尝试了不等于命令 ( != ),但无法正常工作。我甚至找到了一篇帖子,其中 Owen 建议使用以下方法简化上述查询:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and *[EventData[Data[4]!='631']]</Select>
  </Query>
</QueryList>

但是,此查询没有返回任何结果,所以我相信其中一定存在逻辑缺陷。

第二个查询更接近我要找的内容,因为它包含 EventID 20226 和 20227,但我仍然想从查询中排除代码 631。

现在我正在使用

<QueryList>
      <Query Id="0" Path="Application">
        <Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]]</Select>
      </Query>
</QueryList>

当然,即使我断开连接,这仍会重新启动我的 VPN,但这只是暂时的解决方法,直到我找到更好的查询。目前,如果我手动断开连接,我会使用 Ctrl-C 来阻止脚本重新连接。

是否有人对如何编写此查询以包含任何具有除 631 以外的错误代码的 EventID20226 有任何建议?

答案1

我想我找到了答案。不要使用“不等于”(!=) 比较,只需接受 EventID=20226 或 EventID=20227 的所有事件。然后使用数据元素“631”抑制 EventID=20226 的事件。

这很有效,因为与 rasClient 相关的错误代码大约有 150 个(https://support.microsoft.com/en-us/kb/163111

这是我提出的查询。在事件查看器中测试它;它似乎满足所有必要的条件。

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] </Select>
    <Suppress Path="Application">*[System[Provider[@Name='RasClient'] and (Level=4 or Level=0) and (EventID=20226)]]and *[EventData[Data[4]='631']]
</Suppress>
  </Query>
</QueryList>

相关内容