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.

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

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.

Artigos relacionados