rasdial praneša, kad prisijungta. Kada tinklas iš tikrųjų paruoštas?
Išėjimo kodas 0 reiškia, kad rinkimas baigtas, o ne kad failų bendrinimas atsako. Užfiksuokite pradinį rezultatą, tada patikrinkite išteklių, nuo kurio priklauso darbas.
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.
| Result | What it indicates | Next step |
|---|---|---|
| 0 | The dial completed | Probe the resource, do not start writing yet |
| 691 | The credential or authentication method was rejected | Fix the account or method, do not retry in a loop |
| 623 | The named entry was not found | Fix the profile name or its scope |
| Other non-zero | Transport, timeout or adapter failure | Read 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.