XML-Abfrage des Ereignisprotokolls funktioniert nicht

967
Kilauone

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

Ich habe eine Anfrage von Presser gefunden

<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 wenn er Abbrüche findet (20226), werden nur die durch Code 829 oder 629 verursachten gefunden. Es gibt jedoch Dutzende oder mögliche Fehlercodes, und das Hinzufügen von jedem, der mit "oder" verknüpft ist, macht dieses Modell unhandlich.

Ich habe einen nicht gleichwertigen Befehl (! ​​=) Ausprobiert, konnte ihn aber nicht zum Laufen bringen. Ich habe sogar einen Beitrag gefunden, in dem ein Owen empfohlen hat, die obige Abfrage zu vereinfachen

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

Diese Abfrage gibt jedoch KEINE Ergebnisse zurück, daher glaube ich, dass irgendwo ein logischer Fehler vorhanden sein muss.

Die zweite Abfrage ist näher an dem, was ich suche, da sie EventID 20226 und 20227 enthält, aber ich möchte trotzdem Code 631 von der Abfrage ausschließen.

Was ich jetzt benutze, ist

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

Natürlich startet dies mein VPN auch dann neu, wenn ich die Verbindung abtrenne, aber es ist eine temporäre Lösung, bis ich eine bessere Abfrage finde. Wenn ich die Verbindung manuell getrennt habe, verwende ich Strg-C, um die erneute Verbindung des Skripts zu unterbrechen.

Hat jemand Vorschläge, wie diese Abfrage zu schreiben ist, um EventID20226 einzuschließen, das einen anderen Fehlercode als 631 enthält?

0

1 Antwort auf die Frage

0
Kilauone

Ich glaube, ich habe die Antwort gefunden. Akzeptieren Sie statt eines Vergleichs mit "ungleich" (! =) Einfach alle Ereignisse mit EventID = 20226 oder EventID = 20227. Unterdrücken Sie dann die Ereignisse mit der Ereignis-ID 20226 mit einem Datenelement '631'.

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

Hier ist die Frage, die ich mir ausgedacht habe. Testen Sie es in der Ereignisanzeige. es scheint alle notwendigen 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>