rasdial siger forbundet. Hvornår er netværket egentlig klar?
Exitkoden 0 betyder, at opkaldet blev gennemført, ikke at filshareen svarer. Gem det native resultat, og undersøg derefter den ressource, jobbet afhænger af.
Et script, der åbner VPN-vinduet og derefter sover i ti sekunder, gætter, og gættet er forkert i begge retninger: det starter kopieringen, før tunnelen kan bruges, eller det venter, efter at arbejdet kunne være begyndt. Ingen af udfaldene fortæller, om godkendelsen blev færdig. Brug kommandoens eget resultat, og stil derefter tjenesten et spørgsmål, den faktisk kan besvare. Rækkefølgen af de to trin er hele designet.
Hvad kommandoen faktisk rapporterer
For en indbygget Windows-profil, som det installerede kommandolinjeværktøj forstår, ringer rasdial.exe til en navngivet post og returnerer en proceskode. Den kode beskriver opkaldet: nul betyder, at forbindelsen blev oprettet for den profil, og ikke-nul betyder, at det mislykkedes på et trin, som koden angiver. Læs det som resultatet af ét lag, ikke af jobbet.
Resultatet siger intet om tildeling af adresse, privat DNS, tilføjede ruter eller tilladelsen til at nå en bestemt server. Alt det sker efter et vellykket opkald, og enhver af dem kan stadig være forkert. Det hul er grunden til, at et forbundet ikon og en mislykket kopiering så ofte optræder sammen.
Gem resultatet, før noget andet kører
Begynd med at bekræfte, at profilen findes for den konto, der skal køre jobbet, ikke kun for den konto, du tester med:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Ring derefter op, og læs koden med det samme. PowerShell beholder det native resultat i $LASTEXITCODE kun, indtil den næste eksterne kommando kører, så en tilfældig ping mellem opkaldet og kontrollen ødelægger den værdi, du ville læse. Tildel den først til din egen variabel, og beslut så, hvad du vil gøre.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Log koden sammen med den ikke-hemmelige fejltekst, fordi en manglende post, legitimationsoplysninger der afvises, og en timeout kræver forskellige svar. Tabellen knytter de almindelige resultater til det næste trin.
| 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 |
Klarhed er ressourcen, ikke tunnelen
Når opkaldet lykkes, skal du teste det, jobbet har brug for. En share, et API-endepunkt eller en databaseport er en bedre klarhedstest end et offentligt websted, fordi et offentligt websted svarer gennem enhver fungerende vej og ikke beviser noget om den private. Vælg den test, som selve applikationen afhænger af. En vellykket TCP-forbindelse fortæller, at routing og filtrering er åbne, og det er det meste af det, den første skrivning har brug for:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Begræns forsøgene, og noter hvilket trin der mislykkedes. Afviste legitimationsoplysninger bør stoppe scriptet i stedet for at fodre en gentagelsesløkke; et DNS-navn, der endnu ikke er dukket op, fortjener et par korte genforsøg; en port, der aldrig åbner, er et routing- eller politikproblem over klienten.
Hvor forbindelsen allerede fandtes, før jobbet startede, skal du lade den være. At afbryde en session, du ikke selv har åbnet, afbryder brugerens andet arbejde, så noter, hvem der ejer sessionen, og hvilken afslutning der er passende.
Afgræns profilen til den konto, der kører jobbet
En planlagt opgave kører under sin egen identitet og session, og en profil, der virker på dit skrivebord, kan være usynlig der. Gentag synlighedskontrollen og opkaldet under opgavens konto, før du stoler på tidsplanen. Hold også adgangskoden væk fra kommandolinjen: argumenter er synlige for andre processer og ender ofte i logs.
Hvis udrulningen kræver en browserprompt, et smartkort-tryk eller en MFA-godkendelse, er den interaktion en del af designet og kan ikke automatiseres ved at simulere tastetryk. Brug den understøttede klient til det tilfælde, og lad det menneskelige trin ske.
Formen på det endelige script forbliver kort: kontroller profilen, ring op, læs koden, undersøg ressourcen, og begynd så arbejdet. Hvert trin besvarer et spørgsmål, det foregående ikke kunne, og ingen af dem hviler på en søvn.