rasdial di conectado. Cando está realmente lista a rede?
O código de saída 0 significa que a marcaxe rematou, non que o recurso compartido responda. Garde o resultado nativo e logo probe o recurso do que depende o traballo.
Un script que abre a xanela da VPN e despois dorme dez segundos está adiviñando, e a conxectura falla nas dúas direccións: comeza a copia antes de que o túnel sexa utilizábel ou espera cando o traballo xa podería ter comezado. Ningún dos dous resultados di se a autenticación rematou. Use o resultado propio do comando e despois faga ao servizo unha pregunta que de verdade poida responder. A orde deses dous pasos é todo o deseño.
Que informa realmente o comando
Para un perfil nativo de Windows que entende a ferramenta de liña de comandos instalada, rasdial.exe marca unha entrada con nome e devolve un código de saída do proceso. Ese código describe o intento de marcaxe: cero significa que a conexión se estableceu para ese perfil, e distinto de cero que fallou nunha etapa que o código identifica. Léao como o resultado dunha capa, non do traballo.
O resultado non di nada sobre a asignación de enderezo, o DNS privado, as rutas engadidas nin o permiso para chegar a un servidor concreto. Todo iso ocorre despois dunha marcaxe correcta, e calquera deses elementos aínda pode estar mal. Esa fenda é a razón pola que unha icona de conectado e unha copia fallida coexisten tan a miúdo.
Garde o resultado antes de que corra calquera outra cousa
Comece confirmando que o perfil existe para a conta que executará o traballo, non só para a conta coa que proba:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Despois marque e lea o código de inmediato. PowerShell conserva o resultado nativo en $LASTEXITCODE só ata que se execute o seguinte comando externo, así que un ping perdido entre a marcaxe e a comprobación destrúe o valor que pretendía ler. Asígnelle primeiro a súa propia variable e despois decida que facer.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Rexiste o código xunto co texto de erro non secreto, porque unha entrada ausente, unhas credenciais rexeitadas e un tempo de espera esgotado necesitan respostas distintas. A táboa relaciona os resultados habituais co paso seguinte.
| 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 |
A dispoñibilidade é o recurso, non o túnel
Cando a marcaxe funcione, probe o que o traballo necesita. Un recurso compartido, un extremo de API ou un porto de base de datos é unha proba de dispoñibilidade mellor ca un sitio web público, porque un sitio público responde por calquera ruta que funcione e non demostra nada sobre a privada. Escolla a proba da que depende a propia aplicación. Unha conexión TCP correcta dille que o encamiñamento e a filtraxe están abertos, e iso é a maior parte do que necesita a primeira escritura:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Limite os intentos e rexistre que etapa fallou. Unhas credenciais rexeitadas deberían deter o script en lugar de alimentar un bucle de reintentos; un nome DNS que aínda non apareceu merece uns cantos reintentos curtos; un porto que nunca se abre é un problema de encamiñamento ou de política por riba do cliente.
Cando a conexión xa existía antes de que comezase o traballo, déixea en paz. Desconectar unha sesión que non abriu interrompe o outro traballo do usuario, así que rexistre a quen pertence a sesión e que peche é axeitado.
Limite o perfil á conta que executa o traballo
Unha tarefa programada execútase coa súa propia identidade e sesión, e un perfil que funciona no seu escritorio pode ser invisible alí. Repita a comprobación de visibilidade e a marcaxe coa conta da tarefa antes de confiar na programación. Manteña tamén o contrasinal fóra da liña de comandos: os argumentos son visibles para outros procesos e a miúdo acaban nos rexistros.
Se o despregamento require un aviso do navegador, un toque de tarxeta intelixente ou unha aprobación de MFA, esa interacción forma parte do deseño e non se pode automatizar simulando pulsacións. Use o cliente compatible para ese caso e deixe que ocorra o paso humano.
A forma do script final segue a ser curta: comprobe o perfil, marque, lea o código, probe o recurso e logo comece o traballo. Cada paso responde unha pregunta que o anterior non podía, e ningún depende de durmir.