Scenarijus, kuris atidaro VPN langą ir po to miega dešimt sekundžių, spėlioja, ir tas spėjimas neteisingas abiem kryptimis: jis pradeda kopijuoti anksčiau, nei tunelis tampa naudojamas, arba laukia po to, kai darbas jau galėjo prasidėti. Nė vienas rezultatas nepasako, ar autentifikavimas baigtas. Naudokite paties komandos rezultatą, tada užduokite paslaugai klausimą, į kurį ji tikrai gali atsakyti. Šių dviejų žingsnių tvarka yra visas dizainas.

Ką komanda iš tikrųjų praneša

Natūraliam Windows profiliui, kurį supranta įdiegtas komandinės eilutės įrankis, rasdial.exe renka įvardytą įrašą ir grąžina proceso išėjimo kodą. Tas kodas apibūdina rinkimo bandymą: nulis reiškia, kad ryšys tam profiliui buvo užmegztas, o ne nulis – kad jis nepavyko etape, kurį kodas nurodo. Skaitykite jį kaip vieno sluoksnio rezultatą, o ne darbo.

Rezultatas nieko nesako apie adreso priskyrimą, privatų DNS, pridėtus maršrutus ar leidimą pasiekti konkretų serverį. Visa tai vyksta po sėkmingo rinkimo, ir bet kuris iš jų vis dar gali būti neteisingas. Būtent šis tarpas yra priežastis, kodėl prisijungta piktograma ir nepavykusi kopija taip dažnai sutampa.

Užfiksuokite rezultatą, kol niekas kitas neveikia

Pradėkite patvirtindami, kad profilis egzistuoja paskyrai, kuri vykdys darbą, o ne tik paskyrai, su kuria bandote:

Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection

Tada rinkite ir iškart skaitykite kodą. PowerShell laiko pradinį rezultatą $LASTEXITCODE tik iki kitos išorinės komandos vykdymo, todėl atsitiktinis ping tarp rinkimo ir patikros sunaikina reikšmę, kurią norėjote perskaityti. Pirmiausia priskirkite jį savo kintamajam, tada nuspręskite, ką daryti.

& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }

Užregistruokite kodą kartu su ne slaptu klaidos tekstu, nes trūkstamas įrašas, atmesti prisijungimo duomenys ir laiko limitas reikalauja skirtingų reakcijų. Lentelė susieja įprastus rezultatus su kitu žingsniu.

ResultWhat it indicatesNext step
0The dial completedProbe the resource, do not start writing yet
691The credential or authentication method was rejectedFix the account or method, do not retry in a loop
623The named entry was not foundFix the profile name or its scope
Other non-zeroTransport, timeout or adapter failureRead the message, then check the path

Pasirengimas yra išteklius, o ne tunelis

Kai rinkimas pavyksta, išbandykite tai, ko reikia darbui. Bendra saugykla, API galinis taškas ar duomenų bazės prievadas yra geresnis pasirengimo bandymas nei vieša svetainė, nes vieša svetainė atsako bet kuriuo veikiančiu keliu ir nieko neįrodo apie privatų. Pasirinkite tą bandymą, nuo kurio priklauso pati programa. Sėkmingas TCP ryšys pasako, kad maršrutizavimas ir filtravimas atidaryti, ir tai yra didžioji dalis to, ko reikia pirmam įrašui:

Test-NetConnection -ComputerName files.contoso.example -Port 445

Apribokite bandymus ir užregistruokite, kuris etapas nepavyko. Atmesti prisijungimo duomenys turėtų sustabdyti scenarijų, o ne maitinti pakartojimų ciklą; DNS vardas, kuris dar nepasirodė, nusipelno kelių trumpų pakartojimų; prievadas, kuris niekada neatsidaro, yra maršrutizavimo ar politikos problema virš kliento.

Kai ryšys jau egzistavo prieš darbui prasidedant, palikite jį ramybėje. Sesijos, kurios neatidarėte, atjungimas pertraukia kitą vartotojo darbą, todėl užregistruokite, kam priklauso sesija ir koks uždarymas tinkamas.

Apribokite profilį paskyra, kuri vykdo darbą

Suplanuota užduotis veikia savo tapatybe ir sesija, o profilis, kuris veikia jūsų darbalaukyje, ten gali būti nematomas. Pakartokite matomumo patikrą ir rinkimą užduoties paskyroje, prieš pasitikėdami grafiku. Laikykite slaptažodį toliau nuo komandinės eilutės: argumentai matomi kitiems procesams ir dažnai patenka į žurnalus.

Jei diegimas reikalauja naršyklės užklausos, išmaniosios kortelės prisilietimo ar MFA patvirtinimo, ta sąveika yra dizaino dalis ir negali būti automatizuota imituojant klavišų paspaudimus. Tam atvejui naudokite palaikomą klientą ir leiskite įvykti žmogaus žingsniui.

Galutinio scenarijaus forma išlieka trumpa: patikrinkite profilį, rinkite, perskaitykite kodą, išbandykite išteklių, tada pradėkite darbą. Kiekvienas žingsnis atsako į klausimą, į kurį ankstesnis negalėjo, ir nė vienas jų nepasikliauja miegu.

Susiję straipsniai