Одржете Windows VPN активен: активирајте rasdial при настанот на прекин
RasClient 20226 и 20227 означуваат прекин; 631 значи дека тоа го направил човек. Активирајте rasdial на првите два, зачувајте едни акредитиви и читајте го излезниот код.
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 можат да се натпреваруваат за истиот порт и вториот не успева без никаква корисна причина.
Докажете ја патеката за обновување
Намерно тестирајте ги двата правци. Исклучете рачно и потврдете дека не се случува повторно бирање, потоа оневозможете го мрежниот адаптер и потврдете дека задачата се активира кога врската ќе се врати. Тие два теста ја покриваат правилото за потиснување и вистинскиот случај на дефект, и ништо друго не го прави тоа.
Потоа читајте ја историјата на задачи наместо иконата за врска. Историјата запишува кога задачата работела, која сметка ја користела и што вратила акцијата, и тоа е доказот што е потребен кога истиот компјутер повторно ќе падне следниот месец.