事件日誌的 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 引起的終止。得難以處理。

我嘗試了不等於命令(!=)但無法讓它工作。我甚至發現了一篇文章,其中歐文建議使用以下方法簡化上述查詢

<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 的所有事件。然後抑制 EventID=20226 且資料元素為「631」的事件。

這很有效,因為大約有 150 個與 rasClient 相關的錯誤代碼(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>

相關內容