Eit skript som opnar VPN-vindauget og deretter søv i ti sekund, gjetter, og gjettinga er feil i begge retningar: det startar kopien før tunnelen er brukbar, eller det ventar etter at arbeidet kunne ha byrja. Ingen av utfalla fortel deg om autentiseringa er ferdig. Bruk resultatet frå sjølve kommandoen, og spør så tenesta om noko ho faktisk kan svare på. Rekkjefølgja på dei to trinna er heile designet.

Kva kommandoen faktisk rapporterer

For ein innebygd Windows-profil som det installerte kommandolinjeverktøyet forstår, ringjer rasdial.exe opp ei namngjeven oppføring og returnerer ein utgangskode for prosessen. Den koden skildrar oppringingsforsøket: null tyder at tilkoplinga vart oppretta for den profilen, og ikkje-null tyder at det feila på eit trinn som koden peikar ut. Les det som resultatet av eitt lag, ikkje av jobben.

Resultatet seier ingenting om adressetildeling, privat DNS, lagde til ruter eller løyvet til å nå ein bestemd server. Alt dette skjer etter ei vellukka oppringing, og kva som helst av det kan framleis vere gale. Det gapet er grunnen til at eit tilkopla ikon og ein mislukka kopi så ofte lever side om side.

Fang resultatet før noko anna køyrer

Byrja med å stadfeste at profilen finst for kontoen som skal køyre jobben, ikkje berre for kontoen du testar med:

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

Ring så opp og les koden med ein gong. PowerShell held på det opphavlege resultatet i $LASTEXITCODE berre til den neste eksterne kommandoen køyrer, så ein tilfeldig ping mellom oppringinga og kontrollen øydelegg verdien du skulle lese. Tildel han til din eigen variabel først, og avgjer deretter kva du skal gjere.

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

Logg koden saman med den ikkje-hemmelege feilteksten, fordi ei manglande oppføring, avviste påloggingsdetaljar og ein tidsavbrot krev ulike svar. Tabellen koplar dei vanlege resultata til neste handling.

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

Klarheit er ressursen, ikkje tunnelen

Når oppringinga lukkast, test det jobben treng. Ei delt mappe, eit API-endepunkt eller ein databaseport er ein betre klarheitstest enn ein offentleg nettstad, fordi ein offentleg stad svarar via kva som helst fungerande veg og ikkje beviser noko om den private. Vel testen som applikasjonen sjølv er avhengig av. Ei vellukka TCP-tilkopling fortel at ruting og filtrering er opne, og det er det meste av det den første skrivinga treng:

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

Avgrense forsøka og registrer kva trinn som feila. Avviste påloggingsdetaljar bør stoppe skriptet i staden for å mate ein ny forsøksløkke; eit DNS-namn som enno ikkje har dukka opp fortener nokre korte nye forsøk; ein port som aldri opnar seg er eit ruting- eller policyproblem over klienten.

Der tilkoplinga alt fanst før jobben starta, lat henne vere. Å kople frå ei økt du ikkje opna, avbryt det andre arbeidet til brukaren, så registrer kven som eig økta og kva nedkopling som er rett.

Avgrens profilen til kontoen som køyrer jobben

Ein planlagd oppgåve køyrer under sin eigen identitet og økt, og ein profil som fungerer på skrivebordet ditt kan vere usynleg der. Køyr synlegheitskontrollen og oppringinga på nytt under kontoen til oppgåva før du stolar på planen. Hald passordet unna kommandolinja òg: argument er synlege for andre prosessar og hamnar ofte i loggar.

Viss utrullinga krev ei nettlesarførespurnad, eit smartkort-trykk eller ei MFA-godkjenning, er den interaksjonen ein del av designet og kan ikkje automatiserast bort ved å simulere tastetrykk. Bruk den støtta klienten for det tilfellet og lat det menneskelege trinnet skje.

Forma på det endelege skriptet blir kort: sjekk profilen, ring opp, les koden, test ressursen, og start så arbeidet. Kvart trinn svarar på eit spørsmål det førre ikkje kunne, og ingen av dei er avhengige av ein pause.

Relaterte artiklar