Un script que obre la finestra del VPN i després dorm deu segons està endevinant, i l’endevinalla falla en les dues direccions: comença la còpia abans que el túnel sigui utilitzable o espera quan la feina ja podria haver començat. Cap dels dos resultats diu si l’autenticació ha acabat. Feu servir el resultat de la mateixa ordre i després pregunteu al servei una cosa que realment pugui respondre. L’ordre d’aquests dos passos és tot el disseny.

Què informa realment l’ordre

Per a un perfil natiu de Windows que l’eina de línia d’ordres instal·lada entén, rasdial.exe marca una entrada amb nom i retorna un codi de sortida del procés. Aquest codi descriu l’intent de marcatge: zero vol dir que la connexió s’ha establert per a aquell perfil, i diferent de zero vol dir que ha fallat en una etapa que el codi identifica. Llegiu-lo com el resultat d’una capa, no de la feina.

El resultat no diu res sobre l’assignació d’adreça, el DNS privat, les rutes afegides ni el permís per arribar a un servidor concret. Tot això passa després d’un marcatge correcte, i qualsevol d’aquests elements encara pot estar malament. Aquesta escletxa és la raó per la qual una icona de connectat i una còpia fallida coincideixen tan sovint.

Desa el resultat abans que s’executi res més

Comenceu confirmant que el perfil existeix per al compte que executarà la feina, no només per al compte amb què proveu:

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

Després marqueu i llegiu el codi de seguida. El PowerShell conserva el resultat natiu a $LASTEXITCODE només fins que s’executa la propera ordre externa, així que un ping esgarriat entre el marcatge i la comprovació destrueix el valor que volíeu llegir. Assigneu-lo primer a la vostra pròpia variable i després decidiu què fer.

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

Registreu el codi amb el text d’error no secret, perquè una entrada absent, unes credencials rebutjades i un temps d’espera exhaurit necessiten respostes diferents. La taula relaciona els resultats habituals amb el pas següent.

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

La disponibilitat és el recurs, no el túnel

Quan el marcatge funcioni, proveu allò que la feina necessita. Un recurs compartit, un punt final d’API o un port de base de dades és una prova de disponibilitat millor que un lloc web públic, perquè un lloc públic respon per qualsevol camí que funcioni i no demostra res sobre el camí privat. Trieu la prova de la qual depèn la mateixa aplicació. Una connexió TCP correcta us diu que l’encaminament i el filtratge estan oberts, i això és la major part del que necessita la primera escriptura:

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

Limiteu els intents i registreu quina etapa ha fallat. Unes credencials rebutjades han d’aturar l’script en lloc d’alimentar un bucle de reintents; un nom de DNS que encara no ha aparegut mereix uns quants reintents curts; un port que no s’obre mai és un problema d’encaminament o de política per sobre del client.

Si la connexió ja existia abans que comencés la feina, deixeu-la estar. Desconnectar una sessió que no heu obert interromp la feina dels altres usuaris, així que registreu de qui és la sessió i quin tancament és adequat.

Limita el perfil al compte que executa la feina

Una tasca programada s’executa amb la seva pròpia identitat i sessió, i un perfil que funciona al vostre escriptori pot ser invisible allà. Torneu a fer la comprovació de visibilitat i el marcatge amb el compte de la tasca abans de confiar en la programació. Manteniu també la contrasenya fora de la línia d’ordres: els arguments són visibles per a altres processos i sovint acaben als registres.

Si el desplegament requereix un missatge al navegador, un toc de targeta intel·ligent o una aprovació MFA, aquesta interacció forma part del disseny i no es pot automatitzar simulant pulsacions. Feu servir el client compatible per a aquest cas i deixeu que el pas humà passi.

La forma de l’script final es manté curta: comproveu el perfil, marqueu, llegiu el codi, proveu el recurs i després comenceu la feina. Cada pas respon una pregunta que l’anterior no podia, i cap d’ells no depèn de dormir.

Articles relacionats