A Windows nem kínál újratárcsázási szabályt a VPN-ügyfeléhez, ezért az éjfélkor megszakadó kapcsolat reggelinél is le van állva. Az ütemezett feladat, amely figyeli a megszakadást és futtatja a rasdial parancsot, betömi ezt a rést harmadik féltől származó ügyfél nélkül. Hogy a feladat operátorként vagy hurokként viselkedik-e, három részleten múlik: mely eseményekre illeszkedik, melyik hitelesítő adatot látja, és mit tesz az eredménnyel. Egyik sem nehéz, és bármelyik hiánya olyan feladatot hoz létre, amely örökké tárcsáz.

Miért rossz indító az időzítő

Az időzítő a saját ütemezése szerint tárcsáz, függetlenül attól, hogy az alagút le van-e állva. Ez olyan kísérleteket szül, amelyekre senkinek nem volt szüksége, és egy munkamenet közbeni kísérlet meg is szakíthatja azt. Az eseményindító csak akkor fut, amikor a kapcsolat állapotot vált, ami olcsóbb és könnyebben átgondolható. Az esemény az okot is hordozza, és az ok az, ami elválasztja a hálózati hibát attól a személytől, aki szándékosan bontja a kapcsolatot.

Ez a megkülönböztetés a különbség egy hasznos feladat és egy olyan között, amely minden este harcol a felhasználóval. Ez az a rész is, amely általában hiányzik azokból a receptekből, amelyek csak a műveletet írják le.

Az eseménypár, és amelyiket el kell nyomni

A Remote Access Service ügyfele életciklus-rekordokat ír az Application naplóba a RasClient szolgáltató alatt. A 20226 egy befejeződött kapcsolatot jelöl, a 20227 pedig egy sikertelen kísérletet, így bármelyik igazolhat egy új tárcsázást. A feladatban minden más e két azonosító pontos egyeztetésétől függ. Évek óta stabilak, ezért a rájuk épülő receptek még mindig forgalomban vannak, de egy olyan build, amely átnevezi a szolgáltatót vagy az azonosítókat, azt eredményezi, hogy a lekérdezés semmit nem ad vissza. Minden funkciófrissítés után futtassa újra a bizonyítási lépést, ahelyett hogy megvárná, amíg a feladat abbahagyja az indítást.

Egy lezárást ki kell zárni. A 631-es hiba azt jelenti, hogy a felhasználó bontotta a portot, és egy újratárcsázás abban a pillanatban azzal harcol, aki épp szándékosan hálózatot váltott. A kizárást az indító szűrőjébe tegye, ne a szkriptbe, hogy a feladat egyáltalán ne induljon el. Csak egy eseményazonosítóra vonatkozhat, mert a EventData predikátum csak akkor illeszkedik, ha a megnevezett elem létezik, és egy megosztott feltétel csendben eldobná a másik azonosító minden eseményét. Olvassa ki az elem nevét egy valódi rekordból, mielőtt megírja a szűrőt:

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

Az XML megmutatja a pontos Data neveket abban a rekordban. Az ErrorCode a szokásos írásmód, és egy másikat használó rekord esetében ezt a nevet ki kell cserélni az alábbi szűrőben.

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

Illessze ezt az indító egyéni szűrőjébe, és bizonyítsa lekérdezésként, mielőtt indítóvá válik. Ugyanaz az XPath fut a PowerShellből az élő napló ellen, ami az olcsó módja annak, hogy lássa, mire illeszkedik, amíg a feladatelőzmények még nem érintettek.

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

Az az indító, amely csendben semmire nem illeszkedik, pontosan úgy néz ki, mint egy futó és meghiúsuló feladat. Mindkettő úgy jelenik meg, hogy „az automatizálás nem működik”, és egyik sem mondja meg, melyik fele hiányzik. Először a lekérdezés kimenetét ellenőrizze, mert ez egy lépésben elválasztja a két esetet.

A tárcsázás azért hiúsul meg, mert nincs, aki beírja a jelszót

A művelet a kapcsolat nevével futtatja a rasdial parancsot. Ha a profilnak nincs gyorsítótárazott hitelesítő adata, a tárcsázás azonnal meghiúsul, mert nincs, aki válaszoljon a felszólításra. Ez a leggyakoribb oka annak, hogy egy helyesen indított feladat semmi láthatót nem tesz, ezért ellenőrizze ezt, mielőtt az indítóhoz nyúl. A kézi tárcsázás parancssorból elválasztja a hitelesítő adat problémáját az ütemezési problémától.

Mentse el a hitelesítő adatot egyszer az alatt a fiók alatt, amellyel a feladat futni fog, és tegye ezt a fiókot a tervezés részévé. Egy SYSTEM-ként futó feladat nem tudja olvasni az interaktív fiókja által gyorsítótárazott hitelesítő adatot, és egy másvalakiként futó feladat sem. A névnek is pontosan illeszkednie kell a profilhoz, beleértve a felhasználói mező bármely tartomány-előtagját.

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

Az első parancs felsorolja a Windows által ismert neveket. A második név szerint tárcsáz a gyorsítótárazott hitelesítő adattal, a harmadik pedig az a forma, amelyet egy PowerShell-műveletnek használnia kell, mert megvárja és visszaad egy értéket, amelyet a feladat rögzíthet.

A kilépési kódot olvassa, ne az ablakot

Az a feladat, amely várakozás nélkül indít folyamatot, sikert jelent, amint a folyamat létezik. Egy olyan tárcsázásnál, amely egy másodperc múlva meghiúsulhat, ez az ítélet értéktelen. A kilépési kód megvárása valódi eredménnyé teszi a műveletet. A feladatelőzmény önmagában csak azt mutatja, hogy elindult egy folyamat, soha azt, hogy feljött egy alagút.

Naplózza az értéket időbélyeggel minden futásnál. Egyetlen hiba egy kiesés után normális, míg három egymás utáni hiba ugyanazzal a kóddal a hitelesítő adatra vagy a profilra mutat, nem a hálózatra. Ez a minta teszi az előzményt egyáltalán olvasásra érdemessé.

Adjon hozzá egy rövid ismétlési intervallumot biztosításként, és mondja ki egyértelműen, hogyan hat kölcsön egymásra egy eseményindítóval. Az öt percen át percenkénti ismétlés megadja a második kísérletet, amikor az internet az alagúttal együtt visszatért, és a Beállítások alatt, „Ha a feladat már fut, a következő szabály érvényes”, a feladat azt kéri, hogy „Ne indítson új példányt”, így az ismétlés nem fedi át a még folyamatban lévő tárcsázást. E beállítás nélkül két rasdial folyamat versenghet ugyanazért a portért, és a második hasznos ok nélkül meghiúsul.

Bizonyítsa a helyreállítási utat

Tesztelje mindkét irányt szándékosan. Bontsa a kapcsolatot kézzel, és erősítse meg, hogy nem történik újratárcsázás, majd tiltsa le a hálózati adaptert, és erősítse meg, hogy a feladat akkor indul, amikor a kapcsolat visszatér. Ez a két teszt lefedi az elnyomási szabályt és a valódi hibaesetet, és semmi más nem teszi ezt.

Ezután a feladatelőzményt olvassa a kapcsolat ikonja helyett. Az előzmény rögzíti, mikor futott a feladat, melyik fiókot használta és mit adott vissza a művelet, és ez az a bizonyíték, amelyre szükség van, amikor ugyanaz a gép jövő hónapban újra kiesik.

Kapcsolódó cikkek