Windows ne ponuja nobene politike ponovnega klicanja za svojega odjemalca VPN, zato je povezava, ki pade opolnoči, ob zajtrku še vedno prekinjena. Načrtovano opravilo, ki spremlja prekinitev in zažene rasdial, zapre to vrzel brez odjemalca tretje strani. Ali se opravilo obnaša kot operater ali kot zanka, je odvisno od treh podrobnosti: s katerimi dogodki se ujema, katere poverilnice vidi in kaj naredi z rezultatom. Nobena od treh ni težka, in izpustitev katere koli od njih je tisto, kar ustvari opravilo, ki kliče za vedno.

Zakaj je časovnik napačen sprožilec

Časovnik kliče po svojem urniku ne glede na to, ali je tunel prekinjen. To ustvari poskuse, ki jih nihče ni potreboval, poskus med delovno sejo pa jo lahko prekine. Sprožilec dogodka se sproži le, ko povezava spremeni stanje, kar je ceneje in lažje za razmislek. Dogodek nosi tudi razlog, in razlog je tisto, kar loči omrežno napako od osebe, ki se namerno odklopi.

Ta razlika je razlika med koristnim opravilom in tistim, ki se vsak večer bori z uporabnikom. To je tudi del, ki običajno manjka v receptih, ki opisujejo samo dejanje.

Par dogodkov in tisti, ki ga je treba zadušiti

Odjemalec storitve Remote Access Service zapisuje zapise življenjskega cikla v dnevnik Application pod ponudnikom RasClient. 20226 označuje končano povezavo, 20227 pa neuspešen poskus, zato lahko kateri koli od njiju upraviči novo klicanje. Vse ostalo v opravilu je odvisno od natančnega ujemanja teh dveh identifikatorjev. Stabilna sta že leta, zato recepti, zgrajeni na njima, še vedno krožijo, toda gradnja, ki preimenuje ponudnika ali identifikatorje, povzroči, da poizvedba ne vrne ničesar. Znova zaženite korak dokaza po vsaki posodobitvi funkcije, namesto da bi čakali, da opravilo preneha sprožati.

Eno končanje je treba izključiti. Napaka 631 pomeni, da je uporabnik odklopil vrata, in ponovno klicanje v tistem trenutku se bori z osebo, ki je pravkar namerno zamenjala omrežje. Izključitev postavite v filter sprožilca in ne v skript, da se opravilo sploh ne začne. Veljati mora samo za en ID dogodka, ker se predikat EventData ujema le, ko navedeni element obstaja, skupna klavzula pa bi tiho zavrgla vsak dogodek drugega ID. Preberite ime elementa iz resničnega zapisa, preden 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 natančna imena Data v tem zapisu. ErrorCode je običajen zapis, in zapis, ki uporablja kaj drugega, zahteva, da se to ime nadomesti v filtru spodaj.

<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>

Prilepite to v filter po meri sprožilca in to dokažite kot poizvedbo, preden postane sprožilec. Isti XPath se izvaja iz PowerShell proti živemu dnevniku, kar je poceni način, da vidite, s čim se ujema, dokler zgodovina opravil še ni vključ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

Sprožilec, ki tiho ne ustreza ničemur, je videti natanko kot opravilo, ki se izvaja in spodleti. Oba se prikažeta kot »avtomatizacija ne deluje«, in noben ne pove, katera polovica manjka. Najprej preverite izhod poizvedbe, ker loči oba primera v enem koraku.

Klicanje spodleti, ker ni nikogar, ki bi vnesel geslo

Dejanje zažene rasdial z imenom povezave. Ko profil nima predpomnjenih poverilnic, klicanje takoj spodleti, ker ni nikogar, ki bi odgovoril na poziv. To je najpogostejši razlog, da pravilno sproženo opravilo ne naredi ničesar vidnega, zato to preverite, preden se dotaknete sprožilca. Ročno klicanje iz ukazne vrstice loči težavo s poverilnicami od težave z urnikom.

Shranite poverilnice enkrat pod računom, pod katerim bo opravilo teklo, in ta račun naredite del zasnove. Opravilo, ki teče kot SYSTEM, ne more prebrati poverilnic, ki jih je predpomnil vaš interaktivni račun, in tudi opravilo, ki teče kot nekdo drug, ne more. Ime se mora prav tako natančno ujemati s profilom, vključno z morebitno predpono domene v polju uporabnika.

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

Prvi ukaz navaja imena, ki jih Windows pozna. Drugi kliče po imenu s predpomnjenimi poverilnicami, tretji pa je oblika, ki bi jo moralo uporabiti dejanje PowerShell, ker počaka in vrne vrednost, ki jo opravilo lahko zabeleži.

Berite izhodno kodo, ne okna

Opravilo, ki zažene proces brez čakanja, sporoči uspeh takoj, ko proces obstaja. Za klicanje, ki lahko spodleti sekundo kasneje, je ta sodba brez vrednosti. Čakanje na izhodno kodo spremeni dejanje v resničen rezultat. Zgodovina opravil sama pokaže le, da se je proces začel, nikoli, da se je tunel dvignil.

Zabeležite vrednost s časovnim žigom pri vsaki izvedbi. Ena sama napaka po izpadu je običajna, medtem ko tri zaporedne napake z isto kodo kažejo na poverilnice ali profil in ne na omrežje. Prav ta vzorec naredi zgodovino vredno branja.

Dodajte kratek interval ponavljanja kot zavarovanje in jasno povejte, kako deluje skupaj s sprožilcem dogodka. Ponavljanje vsako minuto pet minut zagotovi drugi poskus, ko se je internet vrnil skupaj s tunelom, in v Nastavitvah, »Če opravilo že teče, velja naslednje pravilo«, želi opravilo »Ne zaženi novega primerka«, da se ponavljanje ne prekriva s klicanjem, ki še poteka. Brez te nastavitve se lahko dva procesa rasdial potegujeta za ista vrata in drugi spodleti brez koristnega razloga.

Dokažite pot obnovitve

Preizkusite obe smeri namerno. Prekinite ročno in potrdite, da do ponovnega klicanja ne pride, nato onemogočite omrežni vmesnik in potrdite, da se opravilo sproži, ko se povezava vrne. Ta dva preizkusa pokrivata pravilo zadušitve in resnični primer okvare, in nič drugega tega ne naredi.

Nato berite zgodovino opravil namesto ikone povezave. Zgodovina zabeleži, kdaj je opravilo teklo, kateri račun je uporabilo in kaj je dejanje vrnilo, in to je dokaz, ki je potreben, ko isto napravo naslednji mesec znova pade.

Sorodni članki