XML-Abfrage des Ereignisprotokolls funktioniert nicht

XML-Abfrage des Ereignisprotokolls funktioniert nicht

Ich habe nach einer Abfrage gesucht, die als Auslöser im Taskplaner fungiert. Ich möchte mein VPN neu starten, wenn der RASClient aus irgendeinem Grund außer Code 631 (Der Port wurde vom Benutzer geschlossen) beendet wird (EventID 20226).

Ich habe eine Abfrage gefunden, die Presser bereitgestellt hat

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

und obwohl es Beendigungen findet (20226), findet es nur jene, die durch den Code 829 oder 629 verursacht werden. Es gibt jedoch Dutzende möglicher Fehlercodes, und das Hinzufügen jedes einzelnen mit „oder“ verknüpften Codes macht dieses Modell unhandlich.

Ich habe einen ungleichen Befehl ( != ) ausprobiert, aber es hat nicht funktioniert. Ich habe sogar einen Beitrag gefunden, in dem ein Owen empfohlen hat, die obige Abfrage zu optimieren, indem man

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

Da diese Abfrage jedoch KEINE Ergebnisse liefert, gehe ich davon aus, dass hier irgendwo ein Logikfehler vorliegt.

Die zweite Abfrage kommt dem, was ich suche, schon näher, da sie die EventIDs 20226 und 20227 enthält, ich möchte aber trotzdem den Code 631 aus der Abfrage ausschließen.

Im Moment verwende ich

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

Natürlich wird mein VPN dadurch immer noch neu gestartet, auch wenn ich die Verbindung trenne, aber es ist eine vorübergehende Lösung, bis ich eine bessere Abfrage finde. Wenn ich jetzt manuell die Verbindung trenne, verwende ich Strg-C, um das Skript daran zu hindern, die Verbindung wiederherzustellen.

Hat jemand Vorschläge, wie man diese Abfrage so schreibt, dass sie alle EventID20226 einschließt, die einen anderen Fehlercode als 631 aufweisen?

Antwort1

Ich glaube, ich habe die Antwort gefunden. Anstatt einen „ungleich“-Vergleich (!=) zu verwenden, akzeptieren Sie einfach alle Ereignisse mit EventID=20226 oder EventID=20227. Unterdrücken Sie dann die Ereignisse mit EventID=20226 und einem Datenelement von „631“.

Dies funktioniert gut, da es etwa 150 Fehlercodes gibt, die mit rasClient verknüpft sind (https://support.microsoft.com/en-us/kb/163111)

Hier ist die Abfrage, die mir eingefallen ist. Beim Testen in der Ereignisanzeige scheint sie alle erforderlichen Kriterien zu erfüllen.

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

verwandte Informationen