rasdial spune «conectat». Când este rețeaua cu adevărat gata?
Codul de ieșire 0 înseamnă că conectarea s-a încheiat, nu că partajarea de fișiere răspunde. Capturați rezultatul nativ, apoi testați resursa de care depinde lucrarea.
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.
| 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 |
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ă.