Një skript që hap dritaren e VPN-së dhe më pas fle dhjetë sekonda po hamendëson, dhe hamendësimi është i gabuar në të dy drejtimet: ose e nis kopjimin para se tuneli të jetë i përdorshëm, ose pret pasi puna mund të kishte filluar. Asnjëri prej këtyre rezultateve nuk të thotë nëse vërtetimi ka përfunduar. Përdor rezultatin e vetë komandës, pastaj bëj shërbimit një pyetje të cilës ai vërtet mund t'i përgjigjet. Radha e këtyre dy hapave është i gjithë dizajni.

Çfarë raporton në të vërtetë komanda

Për një profil Windows të brendshëm që mjeti i instaluar i vijës së komandës e kupton, rasdial.exe thërret një zë të emërtuar dhe kthen një kod daljeje të procesit. Ai kod përshkruan përpjekjen e thirrjes: zero do të thotë se lidhja u vendos për atë profil, dhe një vlerë jo zero do të thotë se dështoi në një fazë që kodi e identifikon. Lexoje si rezultat i një shtrese, jo i gjithë punës.

Rezultati nuk thotë asgjë për caktimin e adresës, DNS privat, rrugë të shtuara ose lejen për të arritur një server të caktuar. Të gjitha këto ndodhin pas një thirrjeje të suksesshme, dhe secila prej tyre mund të jetë ende e gabuar. Pikërisht për shkak të këtij hendeku ikona e lidhur dhe kopjimi i dështuar kaq shpesh bashkëjetojnë.

Kap rezultatin para se të nisë çdo gjë tjetër

Fillo duke konfirmuar se profili ekziston për llogarinë që do të ekzekutojë punën, jo vetëm për llogarinë me të cilën po teston:

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

Pastaj thirr dhe lexo kodin menjëherë. PowerShell e mban rezultatin e brendshëm në $LASTEXITCODE vetëm derisa të ekzekutohet komanda tjetër e jashtme, kështu që një ping i humbur midis thirrjes dhe kontrollit shkatërron vlerën që doje të lexoje. Së pari caktoje te ndryshorja jote, pastaj vendos çfarë të bësh.

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

Regjistro kodin bashkë me tekstin e gabimit që nuk është sekret, sepse një zë që mungon, kredencialet e refuzuara dhe skadimi i kohës kërkojnë përgjigje të ndryshme. Tabela i lidh rezultatet e zakonshme me veprimin tjetër.

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

Gatishmëria është burimi, jo tuneli

Pasi thirrja të ketë sukses, testo atë që i duhet punës. Një dosje e përbashkët, një pikë fundore API ose një portë baze të dhënash është provë gatishmërie më e mirë sesa një faqe publike, sepse një faqe publike përgjigjet përmes çdo rruge që funksionon dhe nuk provon asgjë për atë private. Zgjidh provën nga e cila varet vetë aplikacioni. Një lidhje TCP e suksesshme të thotë se rrugëtimi dhe filtrimi janë të hapur, dhe kjo është pjesa më e madhe e asaj që i duhet shkrimit të parë:

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

Kufizo përpjekjet dhe regjistro cila fazë dështoi. Kredencialet e refuzuara duhet ta ndalin skriptin, jo të ushqejnë një cikël ripërpjekjesh; një emër DNS që nuk është shfaqur ende meriton disa ripërpjekje të shkurtra; një portë që nuk hapet kurrë është problem rrugëtimi ose politike mbi klientin.

Aty ku lidhja ekzistonte tashmë para se të fillonte puna, lëre të qetë. Shkëputja e një sesioni që nuk e hape ndërpret punën tjetër të përdoruesit, prandaj regjistro kujt i përket sesioni dhe cila mbyllje është e përshtatshme.

Kufizo profilin te llogaria që ekzekuton punën

Një detyrë e planifikuar ekzekutohet nën identitetin dhe sesionin e vet, dhe një profil që funksionon në desktopin tënd mund të jetë i padukshëm atje. Ekzekuto përsëri kontrollin e dukshmërisë dhe thirrjen nën llogarinë e detyrës përpara se t'i besosh planit. Mbaje fjalëkalimin larg vijës së komandës: argumentet janë të dukshme për proceset e tjera dhe shpesh përfundojnë në regjistra.

Nëse vendosja kërkon një kërkesë në shfletues, një prekje karte inteligjente ose një miratim MFA, ai ndërveprim është pjesë e dizajnit dhe nuk mund të automatizohet duke simuluar shtypje tastesh. Për atë rast përdor klientin e mbështetur dhe lëre hapin njerëzor të ndodhë.

Forma e skriptit përfundimtar mbetet e shkurtër: kontrollo profilin, thirr, lexo kodin, testo burimin, pastaj fillo punën. Çdo hap i përgjigjet një pyetjeje të cilës ai i mëparshmi nuk mund t'i përgjigjej, dhe asnjëri nuk mbështetet në një gjumë.

Artikuj të ngjashëm