rasdial hlási «pripojené». Kedy je sieť naozaj pripravená?
Návratový kód 0 znamená, že pripojenie sa dokončilo, nie že zdieľanie súborov odpovedá. Zachyťte natívny výsledok a potom otestujte zdroj, od ktorého úloha závisí.
Skript, ktorý otvorí okno VPN a potom spí desať sekúnd, iba háda, a ten odhad je nesprávny v oboch smeroch: buď začne kopírovať skôr, než je tunel použiteľný, alebo čaká, hoci práca už mohla začať. Ani jeden z týchto výsledkov nehovorí, či sa overenie dokončilo. Použite výsledok samotného príkazu a potom položte službe otázku, na ktorú naozaj dokáže odpovedať. Poradie týchto dvoch krokov je celý zámer.
Čo príkaz skutočne hlási
Pre natívny profil Windows, ktorému rozumie nainštalovaný nástroj príkazového riadka, rasdial.exe vytočí pomenovanú položku a vráti návratový kód procesu. Ten kód opisuje pokus o pripojenie: nula znamená, že spojenie pre tento profil bolo nadviazané, a nenulová hodnota znamená, že zlyhalo v etape, ktorú kód označuje. Čítajte ho ako výsledok jednej vrstvy, nie celej úlohy.
Výsledok nehovorí nič o prideľovaní adresy, súkromnom DNS, pridaných trasách ani o oprávnení dostať sa na konkrétny server. To všetko sa deje po úspešnom pripojení a ktorákoľvek z tých vecí môže byť stále nesprávna. Práve pre túto medzeru ikona pripojenia a neúspešná kópia tak často existujú vedľa seba.
Zachyťte výsledok skôr, než sa spustí čokoľvek iné
Začnite potvrdením, že profil existuje pre účet, ktorý bude úlohu vykonávať, nielen pre účet, s ktorým testujete:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Potom sa pripojte a hneď prečítajte kód. PowerShell uchováva natívny výsledok v $LASTEXITCODE len do spustenia nasledujúceho externého príkazu, takže náhodný ping medzi pripojením a kontrolou zničí hodnotu, ktorú ste chceli prečítať. Najprv ju priraďte vlastnej premennej a až potom rozhodnite, čo urobíte.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Zaznamenajte kód spolu s textom chyby, ktorý nie je tajný, pretože chýbajúca položka, odmietnuté prihlasovacie údaje a vypršanie času si vyžadujú rozdielne reakcie. Tabuľka spája bežné výsledky s nasledujúcim krokom.
| 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 |
Pripravenosť je zdroj, nie tunel
Keď pripojenie uspeje, otestujte to, čo úloha potrebuje. Zdieľaný priečinok, koncový bod API alebo port databázy je lepšia skúška pripravenosti než verejná webová stránka, pretože verejná stránka odpovedá cez akúkoľvek funkčnú cestu a o súkromnej nič nedokazuje. Vyberte skúšku, od ktorej závisí samotná aplikácia. Úspešné TCP spojenie hovorí, že smerovanie a filtrovanie sú otvorené, a to je väčšina toho, čo prvý zápis potrebuje:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Obmedzte počet pokusov a zapíšte, ktorá etapa zlyhala. Odmietnuté prihlasovacie údaje by mali skript zastaviť, nie kŕmiť slučku opakovaní; názov DNS, ktorý sa ešte neobjavil, si zaslúži niekoľko krátkych opakovaní; port, ktorý sa nikdy neotvorí, je problém smerovania alebo politiky nad klientom.
Tam, kde spojenie existovalo už pred začiatkom úlohy, ho nechajte na pokoji. Odpojenie relácie, ktorú ste neotvorili, prerušuje inú prácu používateľa, preto zapíšte, komu relácia patrí a aké ukončenie je vhodné.
Obmedzte profil na účet, ktorý úlohu vykonáva
Naplánovaná úloha beží pod vlastnou identitou a reláciou a profil, ktorý funguje na vašej pracovnej ploche, môže byť tam neviditeľný. Znova spustite kontrolu viditeľnosti a pripojenie pod účtom úlohy, kým plánu uveríte. Držte heslo mimo príkazového riadka: argumenty sú viditeľné pre iné procesy a často končia v protokoloch.
Ak nasadenie vyžaduje výzvu v prehliadači, dotyk čipovej karty alebo schválenie MFA, táto interakcia je súčasťou návrhu a nedá sa zautomatizovať simulovaním stlačení klávesov. Pre taký prípad použite podporovaného klienta a nechajte ľudský krok prebehnúť.
Podoba výsledného skriptu zostáva krátka: skontrolujte profil, pripojte sa, prečítajte kód, otestujte zdroj a potom začnite prácu. Každý krok odpovedá na otázku, na ktorú predchádzajúci nedokázal, a žiadny sa nespolieha na čakanie.