La consulta XML del registro de eventos no funciona

La consulta XML del registro de eventos no funciona

He estado buscando una consulta que actúe como activador en el Programador de tareas. Quiero reiniciar mi VPN si RASClient finaliza (EventID 20226) por cualquier motivo excepto el código 631 (el usuario cerró el puerto)

Encontré una consulta que proporcionó 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>

y aunque encuentra terminaciones (20226) solo encuentra aquellas causadas por el código 829 o 629. Sin embargo, hay docenas o posibles códigos de error, y agregar cada uno vinculado con "o" hace que este modelo sea difícil de manejar.

Probé un comando no igual ( != ) pero no pude hacerlo funcionar. Incluso encontré una publicación donde Owen recomendaba simplificar la consulta anterior 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>

Sin embargo, esta consulta NO arroja resultados, por lo que creo que debe haber una falla lógica en alguna parte.

La segunda consulta se acerca más a lo que estoy buscando, ya que incluye EventID 20226 y 20227, pero aún así me gustaría excluir el código 631 de la consulta.

Por ahora lo que estoy usando es

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

Por supuesto, esto aún reinicia mi VPN incluso si me desconecto, pero es una solución temporal, hasta que encuentre una consulta mejor. Por ahora, si me desconecto manualmente, uso Ctrl-C para impedir que el script se vuelva a conectar.

¿Alguien tiene alguna sugerencia sobre cómo escribir esta consulta para incluir cualquier EventID20226 que tenga algún código de error distinto del 631?

Respuesta1

Creo que encontré la respuesta. En lugar de utilizar una comparación "no igual a" (!=), simplemente acepte todos los eventos con EventID=20226 o EventID=20227. Luego suprima aquellos eventos que tengan EventID=20226 con un elemento de datos de '631'.

Esto funciona bien ya que hay alrededor de 150 códigos de error asociados con rasClient (https://support.microsoft.com/en-us/kb/163111)

Aquí está la consulta que se me ocurrió. Probándolo en el visor de eventos; parece cumplir con todos los criterios necesarios.

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

información relacionada