Un script care deschide fereastra VPN și apoi doarme zece secunde ghicește, iar presupunerea este greșită în ambele direcții: începe copierea înainte ca tunelul să fie utilizabil sau așteaptă după ce lucrul ar fi putut începe. Niciunul dintre rezultate nu vă spune dacă autentificarea s-a terminat. Folosiți rezultatul comenzii înseși, apoi puneți serviciului o întrebare la care chiar poate răspunde. Ordinea acestor doi pași este întregul proiect.

Ce raportează de fapt comanda

Pentru un profil Windows nativ pe care instrumentul de linie de comandă instalat îl înțelege, rasdial.exe formează o intrare numită și returnează un cod de ieșire al procesului. Acel cod descrie încercarea de conectare: zero înseamnă că legătura a fost stabilită pentru acel profil, iar o valoare diferită de zero înseamnă că a eșuat într-o etapă pe care codul o identifică. Citiți-l ca rezultatul unui singur strat, nu al întregii lucrări.

Rezultatul nu spune nimic despre atribuirea adresei, DNS privat, rute adăugate sau despre permisiunea de a ajunge la un anumit server. Toate acestea se întâmplă după o conectare reușită și oricare dintre ele poate fi încă greșit. Din cauza acestei diferențe, o pictogramă conectată și o copiere eșuată coexistă atât de des.

Capturați rezultatul înainte să ruleze orice altceva

Începeți prin a confirma că profilul există pentru contul care va rula lucrarea, nu doar pentru contul cu care testați:

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

Apoi conectați-vă și citiți codul imediat. PowerShell păstrează rezultatul nativ în $LASTEXITCODE doar până când rulează următoarea comandă externă, așa că un ping rătăcit între conectare și verificare distruge valoarea pe care voiați să o citiți. Atribuiți-l mai întâi propriei variabile și abia apoi decideți ce faceți.

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

Înregistrați codul împreună cu textul erorii care nu este secret, deoarece o intrare lipsă, acreditările respinse și expirarea timpului cer răspunsuri diferite. Tabelul leagă rezultatele obișnuite de acțiunea următoare.

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

Pregătirea este resursa, nu tunelul

Odată ce conectarea reușește, testați lucrul de care are nevoie sarcina. O partajare, un punct final API sau un port de bază de date este o probă de pregătire mai bună decât un site public, pentru că un site public răspunde prin orice cale funcțională și nu dovedește nimic despre cea privată. Alegeți proba de care depinde aplicația însăși. O conexiune TCP reușită vă spune că rutarea și filtrarea sunt deschise, iar de asta are nevoie cea mai mare parte a primei scrieri:

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

Limitați încercările și notați care etapă a eșuat. Acreditările respinse ar trebui să oprească scriptul, nu să hrănească o buclă de reîncercări; un nume DNS care nu a apărut încă merită câteva reîncercări scurte; un port care nu se deschide niciodată este o problemă de rutare sau de politică deasupra clientului.

Acolo unde legătura exista deja înainte de începerea lucrării, lăsați-o în pace. Deconectarea unei sesiuni pe care nu ați deschis-o întrerupe celălalt lucru al utilizatorului, așa că notați cui aparține sesiunea și ce închidere este potrivită.

Limitați profilul la contul care rulează lucrarea

O sarcină programată rulează sub propria identitate și sesiune, iar un profil care funcționează pe desktopul dumneavoastră poate fi invizibil acolo. Rulați din nou verificarea vizibilității și conectarea sub contul sarcinii înainte de a avea încredere în programare. Țineți parola departe de linia de comandă: argumentele sunt vizibile pentru alte procese și ajung adesea în jurnale.

Dacă implementarea cere o solicitare în browser, o atingere a cardului inteligent sau o aprobare MFA, acea interacțiune face parte din proiect și nu poate fi automatizată simulând apăsări de taste. Folosiți clientul acceptat pentru acel caz și lăsați pasul uman să aibă loc.

Forma scriptului final rămâne scurtă: verificați profilul, conectați-vă, citiți codul, testați resursa și abia apoi începeți lucrarea. Fiecare pas răspunde la o întrebare la care cel anterior nu putea, iar niciunul nu se bazează pe o pauză.

Articole similare