rasdial zegt ‘verbonden’. Wanneer is het netwerk echt klaar?
Exitcode 0 betekent dat het inbellen klaar was, niet dat de bestandsshare antwoordt. Leg het native resultaat vast en test daarna de bron waarvan de klus afhangt.
Een script dat het VPN-venster opent en daarna tien seconden slaapt, gokt, en de gok is in beide richtingen fout: het begint de kopie voordat de tunnel bruikbaar is, of het wacht nadat het werk al had kunnen beginnen. Geen van beide uitkomsten vertelt je of de authenticatie klaar is. Gebruik het resultaat van de opdracht zelf en stel de dienst daarna een vraag die hij echt kan beantwoorden. De volgorde van die twee stappen is het hele ontwerp.
Wat de opdracht werkelijk meldt
Voor een native Windows-profiel dat het geïnstalleerde opdrachtregelprogramma begrijpt, kiest rasdial.exe een benoemde vermelding en geeft een exitcode van het proces terug. Die code beschrijft de poging: nul betekent dat de verbinding voor dat profiel tot stand is gebracht, en niet-nul betekent dat het mislukte in een fase die de code aanwijst. Lees het als het resultaat van één laag, niet van de klus.
Het resultaat zegt niets over adres toewijzen, privé-DNS, toegevoegde routes of de toestemming om een bepaalde server te bereiken. Dat alles gebeurt na een geslaagde inbelpoging, en elk ervan kan nog steeds fout zijn. Die kloof is de reden dat een verbonden pictogram en een mislukte kopie zo vaak samengaan.
Leg het resultaat vast voordat er iets anders draait
Begin met te bevestigen dat het profiel bestaat voor het account dat de klus gaat uitvoeren, niet alleen voor het account waarmee je test:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Kies dan in en lees de code onmiddellijk. PowerShell bewaart het native resultaat in $LASTEXITCODE slechts tot de volgende externe opdracht draait, dus een losse ping tussen het inbellen en de controle vernietigt de waarde die je wilde lezen. Wijs het eerst toe aan je eigen variabele en bepaal daarna wat je doet.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Log de code met de niet-geheime fouttekst, want een ontbrekende vermelding, geweigerde inloggegevens en een time-out vragen elk een andere reactie. De tabel koppelt de gangbare resultaten aan de volgende actie.
| 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 |
Gereedheid is de bron, niet de tunnel
Zodra het inbellen lukt, test je wat de klus nodig heeft. Een share, een API-endpoint of een databasepoort is een betere gereedheidstest dan een openbare website, want een openbare site antwoordt via elke werkende route en bewijst niets over de private. Kies de test waarvan de toepassing zelf afhangt. Een geslaagde TCP-verbinding vertelt je dat routering en filtering open zijn, en dat is het meeste van wat de eerste schrijfactie nodig heeft:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Beperk de pogingen en leg vast welke fase faalde. Geweigerde inloggegevens moeten het script stoppen in plaats van een nieuwe poginglus te voeden; een DNS-naam die nog niet is verschenen verdient een paar korte nieuwe pogingen; een poort die nooit opengaat is een routerings- of beleidsprobleem boven de client.
Waar de verbinding al bestond voordat de klus begon, laat hem met rust. Een sessie verbreken die je niet hebt geopend onderbreekt het andere werk van de gebruiker, dus leg vast wie de sessie bezit en welke afsluiting passend is.
Beperk het profiel tot het account dat de klus uitvoert
Een geplande taak draait onder zijn eigen identiteit en sessie, en een profiel dat op je bureaublad werkt, kan daar onzichtbaar zijn. Voer de zichtbaarheidscontrole en het inbellen opnieuw uit onder het account van de taak voordat je de planning vertrouwt. Houd het wachtwoord ook van de opdrachtregel: argumenten zijn zichtbaar voor andere processen en belanden vaak in logs.
Als de uitrol een browserprompt, een smartcardtik of een MFA-goedkeuring vereist, is die interactie deel van het ontwerp en kan die niet worden geautomatiseerd door toetsaanslagen na te bootsen. Gebruik voor dat geval de ondersteunde client en laat de menselijke stap gebeuren.
De vorm van het uiteindelijke script blijft kort: controleer het profiel, kies in, lees de code, test de bron en begin dan het werk. Elke stap beantwoordt een vraag die de vorige niet kon, en geen ervan leunt op een slaap.