Skripta koja otvori prozor VPN-a i zatim spava deset sekundi nagađa, a to nagađanje pogrešno je u oba smjera: počinje kopiranje prije nego što je tunel upotrebljiv ili čeka nakon što je posao već mogao početi. Nijedan ishod ne govori je li autentifikacija završena. Upotrijebite vlastiti rezultat naredbe, a zatim usluzi postavite pitanje na koje ona zaista može odgovoriti. Redoslijed tih dvaju koraka jest cijeli dizajn.

Što naredba zapravo prijavljuje

Za izvorni Windows profil koji instalirani alat naredbenog retka razumije, rasdial.exe bira imenovani unos i vraća izlazni kod procesa. Taj kod opisuje pokušaj biranja: nula znači da je veza uspostavljena za taj profil, a različito od nule da nije uspjela u fazi koju kod označava. Čitajte ga kao rezultat jednog sloja, ne zadatka.

Rezultat ne govori ništa o dodjeli adrese, privatnom DNS-u, dodanim rutama ni dopuštenju za dosezanje određenog poslužitelja. Sve se to događa nakon uspješnog biranja i bilo što od toga još može biti pogrešno. Upravo je taj jaz razlog zašto se ikona »povezano« i neuspjelo kopiranje tako često javljaju zajedno.

Zabilježite rezultat prije nego što se pokrene bilo što drugo

Počnite potvrdom da profil postoji za račun koji će izvršavati zadatak, a ne samo za račun s kojim testirate:

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

Zatim birajte i odmah pročitajte kod. PowerShell čuva izvorni rezultat u $LASTEXITCODE samo do pokretanja sljedeće vanjske naredbe, pa slučajni ping između biranja i provjere uništava vrijednost koju ste namjeravali pročitati. Najprije je dodijelite svojoj varijabli, a zatim odlučite što ćete.

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

Zabilježite kod uz nejavni tekst pogreške, jer unos koji nedostaje, odbijene vjerodajnice i istek vremena traže različite odgovore. Tablica povezuje uobičajene rezultate sa sljedećim korakom.

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

Spremnost je resurs, a ne tunel

Nakon uspješnog biranja provjerite ono što zadatak treba. Dijeljeni resurs, krajnja točka API-ja ili port baze podataka bolja je provjera spremnosti od javnog web-mjesta, jer javno mjesto odgovara kroz svaki radni put i ništa ne dokazuje o privatnom. Odaberite provjeru od koje sama aplikacija zavisi. Uspješna TCP veza govori da su usmjeravanje i filtriranje otvoreni, a to je većina onoga što prvo pisanje treba:

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

Ograničite pokušaje i zabilježite koja je faza neuspjela. Odbijene vjerodajnice trebaju zaustaviti skriptu, a ne hraniti petlju ponovnih pokušaja; DNS ime koje se još nije pojavilo zaslužuje nekoliko kratkih ponavljanja; port koji se nikada ne otvori problem je usmjeravanja ili politike iznad klijenta.

Ako je veza postojala prije početka zadatka, ostavite je na miru. Prekid sesije koju niste otvorili prekida korisnikov drugi posao, pa zabilježite kome sesija pripada i kakvo je zatvaranje primjereno.

Ograničite profil na račun koji izvršava zadatak

Zakazani zadatak radi pod vlastitim identitetom i sesijom, a profil koji radi na vašem radnom stolu ondje može biti nevidljiv. Ponovite provjeru vidljivosti i biranje pod računom zadatka prije nego što povjerujete rasporedu. Držite lozinku izvan naredbenog retka: argumenti su vidljivi drugim procesima i često završe u zapisima.

Ako uvajanje zahtijeva upit u pregledniku, dodir pametne kartice ili odobrenje MFA, ta je interakcija dio dizajna i ne može se automatizirati simuliranjem tipki. Upotrijebite podržanog klijenta za taj slučaj i pustite da se ljudski korak dogodi.

Oblik završne skripte ostaje kratak: provjerite profil, birajte, pročitajte kod, provjerite resurs, a zatim počnite s poslom. Svaki korak odgovara na pitanje na koje prethodni nije mogao, i nijedan se ne oslanja na spavanje.

Povezani članci