이벤트 로그의 XML 쿼리가 작동하지 않습니다.

이벤트 로그의 XML 쿼리가 작동하지 않습니다.

작업 스케줄러에서 트리거 역할을 할 쿼리를 찾고 있었습니다. 코드 631(사용자가 포트를 닫았음)을 제외한 어떤 이유로든 RASClient가 종료되면(EventID 20226) VPN을 다시 시작하고 싶습니다.

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>

종료(20226)를 찾는 동안 코드 829 또는 629로 인해 발생한 종료만 찾습니다. 그러나 수십 개 또는 가능한 오류 코드가 있으며 각 코드를 "또는"으로 연결하면 이 모델이 다루기 어려워집니다.

같지 않은 명령( != )을 시도했지만 제대로 작동하지 못했습니다. 심지어 Owen이 다음을 사용하여 위 쿼리를 간소화하도록 권장하는 게시물도 찾았습니다.

<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를 사용하여 스크립트의 재연결을 중단합니다.

631 이외의 오류 코드가 있는 EventID20226을 포함하도록 이 쿼리를 작성하는 방법에 대한 제안 사항이 있는 사람이 있습니까?

답변1

나는 답을 찾은 것 같아요. "같지 않음"(!=) 비교를 사용하는 대신 EventID=20226 또는 EventID=20227인 모든 이벤트를 수락하면 됩니다. 그런 다음 데이터 요소가 '631'이고 EventID=20226인 이벤트를 억제합니다.

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

관련 정보