Windows не нуди никакву политику поновног позивања за свој VPN клијент, па је веза која падне у поноћ и даље прекинута за доручак. Заказани задатак који прати прекид и покреће rasdial затвара ту празнину без клијента треће стране. Да ли се задатак понаша као оператер или као петља зависи од три детаља: које догађаје повезује, које акредитационе податке може да види и шта ради са резултатом. Ниједан од та три није тежак, а прескакање било ког од њих је оно што ствара задатак који позива заувек.

Зашто је тајмер погрешан окидач

Тајмер позива по сопственом распореду без обзира на то да ли је тунел прекинут. То ствара покушаје који никоме нису били потребни, а покушај током радне сесије може је прекинути. Окидач догађаја се активира само када веза промени стање, што је јефтиније и лакше за размишљање. Догађај носи и разлог, а разлог је оно што раздваја мрежни квар од особе која се намерно искључује.

Та разлика је разлика између корисног задатка и оног који се свако вече бори са корисником. То је и део који обично недостаје у рецептима који описују само радњу.

Пар догађаја и онај који треба потиснути

Клијент услуге Remote Access Service уписује записе животног циклуса у дневник Application под провајдером RasClient. 20226 означава везу која се завршила, а 20227 покушај који није успео, па сваки од њих може оправдати ново позивање. Све остало у задатку зависи од тачног поклапања та два идентификатора. Они су стабилни годинама, зато рецепти изграђени на њима још круже, али изградња која преименује провајдера или идентификаторе чини да упит не врати ништа. Поновите корак доказивања после сваког ажурирања функције, уместо да чекате да задатак престане да се активира.

Једно завршавање треба искључити. Грешка 631 значи да је корисник искључио порт, а поновно позивање у том тренутку се бори са особом која је управо намерно променила мрежу. Ставите изузеће у филтер окидача, а не у скрипту, тако да задатак уопште не почне. Оно мора да се примењује само на један ИД догађаја, јер се EventData предикат поклапа само када именовани елемент постоји, а заједничка клаузула би тихо одбацила сваки догађај другог ИД-а. Прочитајте име елемента из стварног записа пре него што напишете филтер:

Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml

XML приказује тачна имена Data у том запису. ErrorCode је уобичајен правопис, а запис који користи нешто друго захтева да се то име замени у филтеру испод.

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

Налепите то у прилагођени филтер окидача и докажите као упит пре него што постане окидач. Исти XPath се извршава из PowerShell-а над живим дневником, што је јефтин начин да видите са чиме се поклапа док историја задатака још није укључена.

Get-WinEvent -LogName Application -MaxEvents 40 -FilterXPath "*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])" | Select-Object TimeCreated,Id,Message

Окидач који тихо не одговара ничему изгледа тачно као задатак који се извршава и не успева. Оба се појављују као „аутоматизација не ради“, и ниједан не каже која половина недостаје. Прво проверите излаз упита, јер он раздваја та два случаја у једном кораку.

Позивање не успева јер нема кога да укуца лозинку

Радња покреће rasdial са именом везе. Када профил нема кеширане акредитационе податке, позивање одмах не успева јер нема кога да одговори на упит. То је најчешћи разлог зашто исправно активиран задатак не чини ништа видљиво, зато то проверите пре него што дотакнете окидач. Ручно позивање из командне линије раздваја проблем са акредитационим подацима од проблема са заказивањем.

Сачувајте акредитационе податке једном под налогом под којим ће задатак радити и учините тај налог делом дизајна. Задатак који ради као SYSTEM не може да прочита податке кеширане од стране вашег интерактивног налога, а ни задатак који ради као неко други. Име такође мора тачно да одговара профилу, укључујући било који префикс домена у пољу корисника.

rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode

Прва команда наводи имена која Windows познаје. Друга позива по имену користећи кеширане акредитационе податке, а трећа је форма коју би требало да користи радња PowerShell-а, јер чека и враћа вредност коју задатак може да забележи.

Читајте излазни код, а не прозор

Задатак који покрене процес без чекања пријављује успех чим процес постоји. За позивање које може да не успе секунду касније, та пресуда је безвредна. Чекање на излазни код претвара радњу у прави резултат. Историја задатака сама показује само да је процес почео, никада да се тунел подигао.

Забележите вредност са временском ознаком при сваком извршавању. Један неуспех после прекида је нормалан, док три неуспеха заредом са истим кодом указују на акредитационе податке или профил, а не на мрежу. Управо тај образац чини историју вредном читања.

Додајте кратак интервал понављања као осигурање и јасно реците како се понаша са окидачем догађаја. Понављање сваког минута током пет минута обезбеђује други покушај када се интернет вратио заједно са тунелом, а под Подешавања, „Ако се задатак већ извршава, примењује се следеће правило“, задатак жели „Не покрећи нову инстанцу“, тако да понављање не преклапа позивање које још траје. Без тог подешавања два процеса rasdial могу да се такмиче за исти порт и други не успева без икаквог корисног разлога.

Докажите пут опоравка

Намерно тестирајте оба смера. Прекините ручно и потврдите да нема поновног позивања, затим онемогућите мрежни адаптер и потврдите да се задатак активира када се веза врати. Та два теста покривају правило потискивања и стварни случај квара, и ништа друго то не чини.

Затим читајте историју задатака уместо иконе везе. Историја бележи када је задатак радио, који налог је користио и шта је радња вратила, и то је доказ потребан када иста машина поново падне следећег месеца.

Повезани чланци