イベント ログの XML クエリが機能しない

イベント ログの XML クエリが機能しない

タスク スケジューラでトリガーとして機能するクエリを探しています。コード 631 (ポートがユーザーによって閉じられた) 以外の理由で RASClient が終了した場合 (イベント ID 20226)、VPN を再起動したいです。

プレッサーが提供したクエリを見つけました

<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>

ただし、このクエリは結果を返さないので、どこかに論理的な欠陥があるはずだと私は考えています。

2 番目のクエリは、イベント ID 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/ja-jp/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>

関連情報