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>