Udržte VPN v Windows zapnuté: spúšťajte rasdial pri udalosti odpojenia
RasClient 20226 a 20227 označujú výpadok; 631 znamená, že ho spôsobil človek. Spúšťajte rasdial pri prvých dvoch, uložte jeden prihlasovací údaj a čítajte návratový kód.
Windows neponúka pre svojho VPN klienta žiadnu politiku opätovného vytáčania, takže spojenie, ktoré padne o polnoci, je aj pri raňajkách stále prerušené. Naplánovaná úloha, ktorá sleduje odpojenie a spúšťa rasdial, uzatvára túto medzeru bez klienta tretej strany. Či sa úloha správa ako operátor alebo ako slučka, závisí od troch detailov: ktorým udalostiam zodpovedá, aké prihlasovacie údaje vidí a čo robí s výsledkom. Žiadny z tých troch nie je ťažký a práve vynechanie ktoréhokoľvek z nich vytvára úlohu, ktorá vytáča naveky.
Prečo je časovač nesprávny spúšťač
Časovač vytáča podľa vlastného rozvrhu bez ohľadu na to, či je tunel prerušený. To vytvára pokusy, ktoré nikto nepotreboval, a pokus počas pracovnej relácie ju môže prerušiť. Spúšťač udalosti sa aktivuje len vtedy, keď spojenie zmení stav, čo je lacnejšie a ľahšie sa o tom uvažuje. Udalosť nesie aj dôvod a dôvod je to, čo oddeľuje zlyhanie siete od človeka, ktorý sa odpojí úmyselne.
Tento rozdiel je rozdiel medzi užitočnou úlohou a úlohou, ktorá sa každý večer bije s používateľom. Je to aj časť, ktorá zvyčajne chýba v receptoch opisujúcich len akciu.
Dvojica udalostí a tá, ktorú treba potlačiť
Klient služby Remote Access Service zapisuje záznamy životného cyklu do protokolu Application pod poskytovateľom RasClient. 20226 označuje ukončené spojenie a 20227 neúspešný pokus, takže oba môžu ospravedlniť nové vytáčanie. Všetko ostatné v úlohe závisí od presnej zhody týchto dvoch identifikátorov. Sú stabilné roky, preto recepty postavené na nich stále kolujú, ale zostavenie, ktoré premenuje poskytovateľa alebo identifikátory, spôsobí, že dopyt nič nevráti. Krok overenia zopakujte po každej aktualizácii funkcie, namiesto čakania, kým úloha prestane spúšťať.
Jedno ukončenie treba vylúčiť. Chyba 631 znamená, že port odpojil používateľ, a nové vytáčanie v tej chvíli sa bije s človekom, ktorý práve úmyselne zmenil sieť. Vylúčenie dajte do filtra spúšťača, nie do skriptu, aby sa úloha vôbec nespustila. Musí sa vzťahovať len na jedno ID udalosti, pretože predikát EventData zodpovedá len vtedy, keď pomenovaný prvok existuje, a spoločná klauzula by ticho zahodila každú udalosť druhého ID. Prečítajte si názov prvku zo skutočného záznamu, kým napíšete filter:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
XML ukazuje presné názvy Data v tomto zázname. ErrorCode je obvyklé písanie a záznam, ktorý používa niečo iné, vyžaduje nahradenie tohto názvu vo filtri nižšie.
<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>
Vložte to do vlastného filtra spúšťača a dokážte to ako dopyt, kým sa z toho stane spúšťač. Ten istý XPath beží z PowerShellu proti živému protokolu, čo je lacný spôsob, ako vidieť, čomu zodpovedá, kým história úloh ešte nie je zapojená.
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
Spúšťač, ktorý ticho nezodpovedá ničomu, vyzerá presne ako úloha, ktorá sa spustí a zlyhá. Obe sa prejavia ako „automatizácia nefunguje“ a ani jedno nehovorí, ktorá polovica chýba. Najprv skontrolujte výstup dopytu, pretože oba prípady oddelí jedným krokom.
Vytáčanie zlyhá, pretože nie je nikto, kto by napísal heslo
Akcia spúšťa rasdial s názvom pripojenia. Keď profil nemá uložené prihlasovacie údaje, vytáčanie okamžite zlyhá, pretože nie je nikto, kto by odpovedal na výzvu. To je najčastejší dôvod, prečo správne spustená úloha nerobí nič viditeľné, preto to skontrolujte, kým sa dotknete spúšťača. Ručné vytáčanie z príkazového riadka oddeľuje problém s prihlasovacími údajmi od problému s plánovaním.
Uložte prihlasovacie údaje raz pod účtom, pod ktorým bude úloha bežať, a urobte z tohto účtu súčasť návrhu. Úloha bežiaca ako SYSTEM nemôže prečítať údaje uložené vaším interaktívnym účtom a úloha bežiaca ako niekto iný tiež nie. Názov sa tiež musí presne zhodovať s profilom, vrátane prípadnej predpony domény v poli používateľa.
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
Prvý príkaz vypíše názvy, ktoré Windows pozná. Druhý vytáča podľa názvu s uloženými prihlasovacími údajmi a tretí je forma, ktorú by mala použiť akcia PowerShellu, pretože čaká a vracia hodnotu, ktorú môže úloha zaznamenať.
Čítajte návratový kód, nie okno
Úloha, ktorá spustí proces bez čakania, hlási úspech hneď, ako proces existuje. Pre vytáčanie, ktoré môže o sekundu zlyhať, je taký verdikt bezcenný. Čakanie na návratový kód premení akciu na skutočný výsledok. História úloh sama o sebe ukazuje len to, že proces sa spustil, nikdy to, že sa tunel zdvihol.
Zaznamenávajte hodnotu s časovou pečiatkou pri každom spustení. Jediné zlyhanie po výpadku je normálne, kým tri zlyhania za sebou s rovnakým kódom ukazujú na prihlasovacie údaje alebo profil, nie na sieť. Práve tento vzorec robí históriu hodnou čítania.
Pridajte krátky interval opakovania ako poistku a jasne povedzte, ako sa správa vo vzťahu k spúšťaču udalosti. Opakovanie každú minútu počas piatich minút poskytne druhý pokus, keď sa internet vrátil spolu s tunelom, a v časti Nastavenia, „Ak je úloha už spustená, platí nasledujúce pravidlo“, úloha chce „Nespúšťať novú inštanciu“, aby sa opakovanie neprekrylo s vytáčaním, ktoré stále beží. Bez tohto nastavenia môžu dva procesy rasdial súperiť o ten istý port a druhý zlyhá bez užitočného dôvodu.
Dokážte cestu obnovy
Otestujte oba smery úmyselne. Odpojte sa ručne a potvrďte, že k novému vytáčaniu nedochádza, potom zakážte sieťový adaptér a potvrďte, že úloha sa spustí, keď sa spojenie vráti. Tieto dva testy pokrývajú pravidlo potlačenia aj skutočný prípad zlyhania a nič iné to nerobí.
Potom čítajte históriu úloh, nie ikonu pripojenia. História zaznamenáva, kedy úloha bežala, ktorý účet použila a čo akcia vrátila, a to je dôkaz potrebný vtedy, keď ten istý stroj budúci mesiac znova padne.