Windows nepiedāvā savam VPN klientam nekādu atkārtotas zvanīšanas politiku, tāpēc savienojums, kas pārtrūkst pusnaktī, brokastīs joprojām ir pārtraukts. Plānots uzdevums, kas uzrauga pārtraukumu un palaiž rasdial, aizpilda šo robu bez trešās puses klienta. Vai uzdevums uzvedas kā operators vai kā cilpa, ir atkarīgs no trim detaļām: ar kuriem notikumiem tas saskan, kādus akreditācijas datus tas redz un ko tas dara ar rezultātu. Neviens no trim nav grūts, un jebkura no tiem izlaišana rada uzdevumu, kas zvana mūžīgi.

Kāpēc taimeris ir nepareizais trigeris

Taimeris zvana pēc sava grafika neatkarīgi no tā, vai tunelis ir pārtraukts. Tas rada mēģinājumus, kas nevienam nebija vajadzīgi, un mēģinājums darba sesijas laikā var to pārtraukt. Notikuma trigeris iedarbojas tikai tad, kad savienojums maina stāvokli, kas ir lētāk un vieglāk pārdomājams. Notikums nes arī iemeslu, un iemesls ir tas, kas atdala tīkla kļūmi no cilvēka, kurš apzināti atvienojas.

Šī atšķirība ir atšķirība starp noderīgu uzdevumu un tādu, kas katru vakaru cīnās ar lietotāju. Tā ir arī daļa, kas parasti trūkst receptēs, kuras apraksta tikai darbību.

Notikumu pāris un tas, kas jānospiež

Remote Access Service klients raksta dzīves cikla ierakstus Application žurnālā pie pakalpojumu sniedzēja RasClient. 20226 apzīmē beigušos savienojumu, bet 20227 – neizdevušos mēģinājumu, tāpēc abi var pamatot jaunu zvanīšanu. Viss pārējais uzdevumā ir atkarīgs no šo divu identifikatoru precīzas saskaņošanas. Tie ir stabili jau gadiem, tāpēc uz tiem balstītas receptes joprojām cirkulē, bet būvējums, kas pārdēvē pakalpojumu sniedzēju vai identifikatorus, liek vaicājumam neko neatgriezt. Atkārtojiet pierādīšanas soli pēc katras funkcijas atjauninājuma, nevis gaidiet, kad uzdevums pārstās iedarboties.

Viens izbeigums ir jāizslēdz. Kļūda 631 nozīmē, ka portu atvienoja lietotājs, un atkārtota zvanīšana tajā brīdī cīnās ar cilvēku, kurš tikko apzināti nomainīja tīklu. Ievietojiet izslēgumu trigera filtrā, nevis skriptā, lai uzdevums vispār nesāktos. Tam jāattiecas tikai uz vienu notikuma ID, jo EventData predikāts saskan tikai tad, kad nosauktais elements pastāv, un kopīga klauzula klusi izmestu katru otra ID notikumu. Pirms filtra rakstīšanas nolasiet elementa nosaukumu no īsta ieraksta:

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

XML parāda precīzus Data nosaukumus šajā ierakstā. ErrorCode ir ierastā rakstība, un ierakstam, kas izmanto ko citu, šis nosaukums ir jāaizstāj zemāk esošajā filtrā.

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

Ielīmējiet to trigera pielāgotajā filtrā un pierādiet to kā vaicājumu, pirms tas kļūst par trigeri. Tas pats XPath darbojas no PowerShell pret dzīvo žurnālu, kas ir lētais veids, kā redzēt, kam tas atbilst, kamēr uzdevumu vēsture vēl nav iesaistīta.

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

Trigeris, kas klusi neatbilst nekam, izskatās tieši kā uzdevums, kas darbojas un neizdodas. Abi parādās kā „automatizācija nedarbojas“, un neviens nepasaka, kuras puses trūkst. Vispirms pārbaudiet vaicājuma izvadi, jo tā vienā solī atdala abus gadījumus.

Zvanīšana neizdodas, jo nav neviena, kas ierakstītu paroli

Darbība palaiž rasdial ar savienojuma nosaukumu. Ja profilā nav kešatmiņā saglabātu akreditācijas datu, zvanīšana nekavējoties neizdodas, jo nav neviena, kas atbildētu uz uzvedni. Tas ir visbiežākais iemesls, kāpēc pareizi iedarbināts uzdevums neko redzamu nedara, tāpēc pārbaudiet to pirms trigera aizskaršanas. Zvanīšana ar roku no komandrindas atdala akreditācijas datu problēmu no plānošanas problēmas.

Saglabājiet akreditācijas datus vienreiz zem tā konta, ar kuru uzdevums darbosies, un padariet šo kontu par dizaina daļu. Uzdevums, kas darbojas kā SYSTEM, nevar nolasīt jūsu interaktīvā konta kešatmiņā saglabātos datus, un uzdevums, kas darbojas kā kāds cits, arī nevar. Nosaukumam arī precīzi jāatbilst profilam, ieskaitot jebkuru domēna prefiksu lietotāja laukā.

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

Pirmā komanda uzskaita nosaukumus, ko zina Windows. Otrā zvana pēc nosaukuma, izmantojot kešatmiņā saglabātos datus, un trešā ir forma, kas jāizmanto PowerShell darbībai, jo tā gaida un atgriež vērtību, ko uzdevums var ierakstīt.

Lasiet iziešanas kodu, nevis logu

Uzdevums, kas palaiž procesu, negaidot, ziņo par panākumiem, tiklīdz process pastāv. Zvanīšanai, kas var neizdoties sekundi vēlāk, šis spriedums ir bezvērtīgs. Iziešanas koda gaidīšana pārvērš darbību īstā rezultātā. Uzdevumu vēsture pati par sevi parāda tikai to, ka process sākās, nekad to, ka tunelis pacēlās.

Reģistrējiet vērtību ar laika zīmogu katrā izpildē. Viens neizdevums pēc pārtraukuma ir normāli, bet trīs neizdevumi pēc kārtas ar to pašu kodu norāda uz akreditācijas datiem vai profilu, nevis uz tīklu. Tieši šis modelis padara vēsturi lasīšanas vērtu.

Pievienojiet īsu atkārtošanas intervālu kā apdrošināšanu un skaidri pasakiet, kā tas mijiedarbojas ar notikuma trigeri. Atkārtošana katru minūti piecas minūtes nodrošina otro mēģinājumu, kad internets atgriezās kopā ar tuneli, un sadaļā Iestatījumi, „Ja uzdevums jau darbojas, tiek piemērots šāds noteikums“, uzdevums vēlas „Nesākt jaunu instanci“, lai atkārtošana nepārklātos ar vēl notiekošu zvanīšanu. Bez šī iestatījuma divi rasdial procesi var sacensties par to pašu portu, un otrais neizdodas bez jebkāda noderīga iemesla.

Pierādiet atjaunošanas ceļu

Apzināti pārbaudiet abus virzienus. Atvienojiet ar roku un apstipriniet, ka atkārtota zvanīšana nenotiek, pēc tam atspējojiet tīkla adapteri un apstipriniet, ka uzdevums iedarbojas, kad saite atgriežas. Šie divi testi aptver nomākšanas noteikumu un reālo atteices gadījumu, un nekas cits to nedara.

Pēc tam lasiet uzdevumu vēsturi, nevis savienojuma ikonu. Vēsture reģistrē, kad uzdevums darbojās, kuru kontu tas izmantoja un ko darbība atgrieza, un tas ir pierādījums, kas vajadzīgs, kad tā pati mašīna nākamajā mēnesī atkal pārtrūks.

Saistītie raksti