rasdial dice connesso. Quando la rete è davvero pronta?
Il codice di uscita 0 significa che la connessione è stata completata, non che la condivisione file risponda. Registrate il risultato nativo, poi sondate la risorsa da cui dipende il lavoro.
Uno script che apre la finestra della VPN e poi dorme dieci secondi sta indovinando, e l’ipotesi è sbagliata in entrambe le direzioni: inizia la copia prima che il tunnel sia utilizzabile, oppure aspetta dopo che il lavoro avrebbe già potuto iniziare. Nessuno dei due esiti dice se l’autenticazione è terminata. Usate il risultato proprio del comando, poi ponete al servizio una domanda a cui possa davvero rispondere. L’ordine di questi due passaggi è tutto il progetto.
Cosa riporta davvero il comando
Per un profilo Windows nativo che lo strumento da riga di comando installato comprende, rasdial.exe compone una voce con nome e restituisce un codice di uscita del processo. Quel codice descrive il tentativo di connessione: zero significa che la connessione è stata stabilita per quel profilo, e diverso da zero che è fallita in una fase che il codice identifica. Leggetelo come il risultato di uno strato, non del lavoro.
Il risultato non dice nulla sull’assegnazione dell’indirizzo, il DNS privato, le route aggiunte né sul permesso di raggiungere un determinato server. Tutto questo avviene dopo una connessione riuscita, e ciascuno di questi elementi può ancora essere sbagliato. È questo divario che spiega la così frequente compresenza di un’icona connessa e di una copia fallita.
Registrate il risultato prima che giri qualcos’altro
Iniziate confermando che il profilo esiste per l’account che eseguirà il lavoro, non solo per l’account con cui state provando:
Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection
Poi componete e leggete subito il codice. PowerShell conserva il risultato nativo in $LASTEXITCODE solo fino all’esecuzione del comando esterno successivo, quindi un ping vagante tra la connessione e il controllo distrugge il valore che volevate leggere. Assegnatelo prima a una vostra variabile, poi decidete cosa fare.
& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }
Registrate il codice insieme al testo dell’errore non segreto, perché una voce mancante, credenziali rifiutate e un timeout richiedono risposte diverse. La tabella associa i risultati comuni al passo successivo.
| 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 |
La prontezza è la risorsa, non il tunnel
Una volta riuscita la connessione, provate ciò di cui il lavoro ha bisogno. Una condivisione, un endpoint API o una porta di database è una sonda di prontezza migliore di un sito web pubblico, perché un sito pubblico risponde attraverso qualsiasi percorso funzionante e non dimostra nulla sul percorso privato. Scegliete la sonda da cui dipende l’applicazione stessa. Una connessione TCP riuscita vi dice che l’instradamento e il filtraggio sono aperti, e questo è la maggior parte di ciò che serve alla prima scrittura:
Test-NetConnection -ComputerName files.contoso.example -Port 445
Limitate i tentativi e registrate quale fase è fallita. Credenziali rifiutate dovrebbero fermare lo script invece di alimentare un ciclo di nuovi tentativi; un nome DNS non ancora comparso merita qualche breve nuovo tentativo; una porta che non si apre mai è un problema di instradamento o di criterio sopra il client.
Dove la connessione esisteva già prima dell’inizio del lavoro, lasciatela stare. Disconnettere una sessione che non avete aperto interrompe l’altro lavoro dell’utente, quindi registrate a chi appartiene la sessione e quale smontaggio è appropriato.
Limitate il profilo all’account che esegue il lavoro
Un’attività pianificata viene eseguita con la propria identità e la propria sessione, e un profilo che funziona sul vostro desktop può essere invisibile lì. Ripetete il controllo di visibilità e la connessione con l’account dell’attività prima di fidarvi della pianificazione. Tenete anche la password fuori dalla riga di comando: gli argomenti sono visibili ad altri processi e spesso finiscono nei registri.
Se la distribuzione richiede un prompt del browser, un tocco di smart card o un’approvazione MFA, quell’interazione fa parte del progetto e non può essere automatizzata simulando le battute. Usate il client supportato per quel caso e lasciate che il passaggio umano avvenga.
La forma dello script finale resta breve: verificate il profilo, componete, leggete il codice, sondate la risorsa, poi iniziate il lavoro. Ogni passo risponde a una domanda che il precedente non poteva risolvere, e nessuno si basa su una pausa.