Držite Windows VPN uključenim: pokrenite rasdial na događaju prekida
RasClient 20226 i 20227 označavaju prekid; 631 znači da ga je izazvala osoba. Pokrenite rasdial na prva dva, sačuvajte jedne vjerodajnice i čitajte izlazni kod.
Windows ne nudi politiku ponovnog biranja za svog VPN klijenta, pa je veza koja padne u ponoć i dalje prekinuta za doručkom. Zakazani zadatak koji prati prekid i pokreće rasdial zatvara tu prazninu bez klijenta treće strane. Da li se zadatak ponaša kao operater ili kao petlja, svodi se na tri detalja: koje događaje uparuje, koje vjerodajnice može vidjeti i šta radi s rezultatom. Nijedan od ta tri nije težak, a propuštanje bilo kojeg od njih stvara zadatak koji bira zauvijek.
Zašto je tajmer pogrešan okidač
Tajmer bira po svom rasporedu bez obzira na to je li tunel prekinut. To stvara pokušaje koji nikome nisu potrebni, a pokušaj tokom radne sesije može je prekinuti. Okidač događaja se aktivira samo kada veza promijeni stanje, što je jeftinije i lakše za rasuđivanje. Događaj nosi i razlog, a razlog je ono što razdvaja mrežni kvar od osobe koja se namjerno isključila.
Ta razlika je razlika između korisnog zadatka i onog koji se svako veče bori s korisnikom. To je i dio koji obično nedostaje u receptima koji opisuju samo radnju.
Par događaja i onaj koji treba potisnuti
Klijent usluge Remote Access Service upisuje zapise životnog ciklusa u dnevnik Application pod davaocem RasClient. 20226 označava vezu koja je završena, a 20227 pokušaj koji nije uspio, pa svaki od njih može opravdati novo biranje. Sve ostalo u zadatku zavisi od tačnog podudaranja tih dvaju identifikatora. Oni su stabilni godinama, zato recepti izgrađeni na njima još kruže, ali gradnja koja preimenuje davaoca ili identifikatore čini da upit ne vraća ništa. Ponovite korak dokazivanja nakon svakog ažuriranja funkcije, umjesto da čekate da zadatak prestane da se aktivira.
Jedan prekid treba izuzeti. Greška 631 znači da je port prekinuo korisnik, a ponovno biranje u tom trenutku se bori s osobom koja je upravo namjerno promijenila mrežu. Stavite izuzetak u filter okidača, a ne u skriptu, da se zadatak uopšte ne pokrene. Mora se primijeniti na samo jedan ID događaja, jer se predikat EventData podudara samo kada imenovani element postoji, a zajednička klauzula bi tiho odbacila svaki događaj drugog ID-a. Pročitajte naziv elementa iz stvarnog zapisa prije nego što napišete filter:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
XML prikazuje tačna imena Data u tom zapisu. ErrorCode je uobičajen način pisanja, a zapis koji koristi nešto drugo zahtijeva da se to ime zamijeni u filteru ispod.
<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>
Zalijepite to u prilagođeni filter okidača i dokažite to kao upit prije nego što postane okidač. Isti XPath se pokreće iz PowerShell-a nad živim dnevnikom, što je jeftin način da vidite s čime se podudara dok historija zadataka još nije uključena.
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
Okidač koji tiho ne odgovara ničemu izgleda tačno kao zadatak koji se izvršava i ne uspijeva. Oba se predstavljaju kao „automatizacija ne radi“, i nijedan ne kaže koja polovina nedostaje. Prvo provjerite izlaz upita, jer razdvaja ta dva slučaja u jednom koraku.
Biranje ne uspijeva jer nema nikoga da otkuca lozinku
Radnja pokreće rasdial s imenom veze. Kada profil nema keširane vjerodajnice, biranje odmah ne uspijeva jer nema nikoga da odgovori na upit. To je najčešći razlog zašto ispravno aktiviran zadatak ne čini ništa vidljivo, zato to provjerite prije nego što dirate okidač. Ručno biranje iz komandne linije razdvaja problem s vjerodajnicama od problema sa zakazivanjem.
Sačuvajte vjerodajnice jednom pod računom pod kojim će zadatak raditi i učinite taj račun dijelom dizajna. Zadatak koji radi kao SYSTEM ne može pročitati vjerodajnice koje je keširao vaš interaktivni račun, a ni zadatak koji radi kao neko drugi. Ime se također mora tačno podudarati s profilom, uključujući svaki prefiks domena u polju korisnika.
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
Prva komanda navodi imena koja Windows poznaje. Druga bira po imenu koristeći keširane vjerodajnice, a treća je oblik koji bi PowerShell radnja trebalo da koristi, jer čeka i vraća vrijednost koju zadatak može zabilježiti.
Čitajte izlazni kod umjesto prozora
Zadatak koji pokrene proces bez čekanja prijavljuje uspjeh čim proces postoji. Za biranje koje može pasti sekundu kasnije, ta presuda je bezvrijedna. Čekanje na izlazni kod pretvara radnju u stvarni rezultat. Historija zadataka sama po sebi pokazuje samo da je proces pokrenut, nikada da se tunel podigao.
Bilježite vrijednost s vremenskom oznakom pri svakom izvršavanju. Jedan neuspjeh nakon prekida je normalan, dok tri neuspjeha zaredom s istim kodom ukazuju na vjerodajnice ili profil, a ne na mrežu. Taj obrazac čini historiju vrijednom čitanja.
Dodajte kratak interval ponavljanja kao osiguranje i budite eksplicitni o tome kako se on odnosi na okidač događaja. Ponavljanje svake minute pet minuta daje drugi pokušaj kada se internet vratio zajedno s tunelom, a pod Postavkama, „Ako se zadatak već izvršava, primjenjuje se sljedeće pravilo“, zadatak želi „Ne pokreći novu instancu“ da ponavljanje ne bi preklopilo biranje koje je još u toku. Bez te postavke dva procesa rasdial mogu se takmičiti za isti port i drugi ne uspijeva bez korisnog razloga.
Dokažite put oporavka
Namjerno testirajte oba smjera. Prekinite ručno i potvrdite da se ponovno biranje ne događa, zatim onemogućite mrežni adapter i potvrdite da se zadatak aktivira kada se veza vrati. Ta dva testa pokrivaju pravilo potiskivanja i stvarni slučaj kvara, i ništa drugo to ne čini.
Nakon toga čitajte historiju zadataka, a ne ikonu veze. Historija bilježi kada je zadatak radio, koji je račun koristio i šta je radnja vratila, i to je dokaz potreban kada ista mašina ponovo padne sljedećeg mjeseca.