Я не согласен с ответом Оуэна выше, потому что использую "не равно" (!=) Команда не работает при сравнении значения с элементом EventData. Запрос вернул ноль результатов.
Я, однако, пришел с ответом, который находит все события с EventID 20226 (Завершение соединения RAS) или EventID 20227 (Ошибка соединения RAS при подключении)
Хитрость заключается в том, чтобы затем подавить те результаты, которые имеют EventID = 20226 с элементом данных 631 (порт был отключен пользователем)
Таким образом, в основном вы получаете все события 20226 и 20227, а затем из этого списка отклоняете результаты 20226 с ошибкой 631
Это работает хорошо, поскольку с rasClient связано около 150 кодов ошибок (https://support.microsoft.com/en-us/kb/163111), и единственное, что я не хочу инициировать перезагрузку, это когда я отключаю соединение (631).
Вот запрос, который я придумал. Тестирование в средстве просмотра событий; кажется, соответствует всем необходимым критериям.
<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>
Использование этого в качестве триггера для действия Запустите программу C:\Windows\System32\rasdial.exe «». UserID Пароль запустит процесс переподключения всякий раз, когда соединение не устанавливается.
Это не «идеальное» решение, поскольку оно основано на хранении вашего идентификатора пользователя и пароля VPN в виде простого текста, но я полагаю, что если кто-то проник настолько глубоко в мой компьютер, у меня больше проблем, чем беспокоиться об одном пароле VPN.