XML-запрос журнала событий не работает

XML-запрос журнала событий не работает

Я искал запрос, который будет действовать как триггер в планировщике задач. Я хочу перезапустить свой VPN, если RASClient завершается (EventID 20226) по любой причине, кроме кода 631 (порт был закрыт пользователем)

Я нашел запрос, который предоставил Прессер

<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. Однако существуют десятки возможных кодов ошибок, и добавление каждого из них, связанного с «или», делает эту модель громоздкой.

Я попробовал команду not equal ( != ), но не смог заставить ее работать. Я даже нашел пост, в котором Оуэн рекомендовал оптимизировать приведенный выше запрос, используя

<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, чтобы остановить скрипт от повторного подключения.

Есть ли у кого-нибудь предложения, как составить этот запрос, чтобы включить любой EventID20226 с кодом ошибки, отличным от 631?

решение1

Думаю, я нашел ответ. Вместо использования сравнения «не равно» (!=) просто примите все события с EventID=20226 или EventID=20227. Затем подавите те события, которые имеют EventID=20226 с элементом данных '631'.

Это работает хорошо, поскольку с 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>

Связанный контент