Consulta XML do log de eventos não funciona

Consulta XML do log de eventos não funciona

Estou procurando uma consulta que funcione como gatilho no Agendador de tarefas. Quero reiniciar minha VPN se o RASClient terminar (EventID 20226) por qualquer motivo, exceto o código 631 (a porta foi fechada pelo usuário)

Encontrei uma consulta fornecida por 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>

e embora encontre terminações (20226), apenas encontra aquelas causadas pelo código 829 ou 629. No entanto, existem dezenas ou possíveis códigos de erro, e adicionar cada um deles vinculado a "ou" torna este modelo difícil de manejar.

Tentei um comando diferente ( != ), mas não consegui fazê-lo funcionar. Eu até encontrei uma postagem onde Owen recomendou simplificar a consulta acima usando

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

No entanto, esta consulta NÃO retorna resultados, então acredito que deve haver uma falha lógica em algum lugar.

A segunda consulta está mais próxima do que procuro, pois inclui EventID 20226 e 20227, mas ainda gostaria de excluir o código 631 da consulta.

Por enquanto o que estou usando é

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

É claro que isso ainda reinicia minha VPN mesmo se eu desconectar, mas é uma solução temporária, até que eu encontre uma consulta melhor. Por enquanto, se eu desconectar manualmente, uso Ctrl-C para interromper a reconexão do script.

Alguém tem alguma sugestão sobre como escrever esta consulta para incluir qualquer EventID20226 que tenha qualquer código de erro diferente de 631?

Responder1

Acho que encontrei a resposta. Em vez de usar uma comparação “diferente de” (!=), simplesmente aceite todos os eventos com EventID=20226 ou EventID=20227. Em seguida, suprima os eventos que possuem EventID=20226 com um elemento de dados '631'.

Isso funciona bem, pois existem cerca de 150 códigos de erro associados ao rasClient (https://support.microsoft.com/en-us/kb/163111)

Aqui está a consulta que eu criei. Testando no visualizador de eventos; parece atender a todos os critérios necessários.

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

informação relacionada