La lettera di unità compare all'accesso e poi si apre come cartella vuota, oppure con una croce rossa e un messaggio su una risorsa di rete non disponibile. I permessi di solito sono a posto. Quello che è successo è che il comando di mappatura è stato eseguito durante la finestra in cui il client VPN esisteva ma non esisteva alcuna route verso il file server, e Windows ha registrato quel fallimento come stato dell'unità. La soluzione è smettere di trattare la mappatura come qualcosa che accade all'accesso e trattarla come l'ultimo passo di una sequenza di connessione.

Perché la mappatura viene eseguita troppo presto

Uno script di accesso inizia quando inizia la sessione. Un client VPN che si connette durante l'accesso aggiunge la propria sequenza temporale sopra: il processo può essere in esecuzione, l'adattatore virtuale può esistere e la route verso la subnet dell'ufficio può ancora mancare. Questi tre stati appaiono uguali dal punto di vista di uno script e solo uno di essi funziona.

Alcuni ambienti reagiscono ripetendo la stessa riga fallita a ogni accesso, il che produce un utente che ha imparato a fare doppio clic sull'unità e uno script che non è mai riuscito da solo.

L'unità stessa peggiora le cose. Un'unità mappata è un oggetto di sessione, e una volta che Windows l'ha contrassegnata come non disponibile, l'icona può restare rotta molto dopo che il tunnel è sano. È per questo che rimappare a mano funziona mentre lo script sembra non fare nulla. La sessione ricorda il fallimento, non l'intenzione che c'era dietro.

Uno stato connesso non è un percorso

L'icona della VPN nella barra delle applicazioni indica se il tunnel è attivo. Non dice nulla sull'esistenza di una route verso un server specifico, né se il DNS risolve quel nome nell'indirizzo del tunnel, né se il firewall del server stesso vi accetta.

Sono tre guasti separati con lo stesso esito visibile, e condizionare tutto all'icona della barra li fonde in un unico segnale inaffidabile.

Un controllo di disponibilità che nomina il server di cui avete davvero bisogno li distingue, perché fallisce finché non funziona il percorso specifico, e non finché un'interfaccia qualsiasi si dichiara connessa.

Condizionate al server, non al client

Scegliete un host raggiungibile solo attraverso il tunnel e aspettatelo prima di mappare qualsiasi cosa. Il frammento qui sotto connette una voce VPN di Windows salvata, verifica il file server e poi mappa l'unità.

@echo off
set server=fileserver.corp.example
rasdial "Office VPN" /disconnect
rasdial "Office VPN"
:wait
ping -n 1 -w 1000 %server% >nul || (
  timeout /t 5 /nobreak >nul
  goto wait
)
net use Z: \\%server%\share /persistent:no

Il ping è una sonda di disponibilità, non un test dei permessi. Se l'ICMP è filtrato sulla vostra rete, verificate invece il servizio che usate davvero: net view \\%server% per un controllo rapido, o un breve test TCP sulla porta 445 in PowerShell. Entrambi condizionano la cosa che conta.

Aggiungete un numero limitato di tentativi. Un ciclo di attesa senza tetto trasforma un tunnel rotto in una sessione che non finisce mai di accedere, e questa è una chiamata al supporto peggiore di una lettera di unità mancante.

Rendetelo rieseguibile e consapevole della sessione

Eseguitelo nella sessione dell'utente stesso. Un'attività eseguita come SYSTEM colloca l'unità in una sessione completamente diversa, e l'utente che ha effettuato l'accesso non vede mai il risultato. Così ottenete uno script che riporta successo e un desktop senza alcuna unità.

Verificate prima di mappare e rimuovete solo la voce obsoleta. net use Z: /delete restituisce un errore quando la lettera non è in uso, e quell'errore è sicuro da ignorare invece di essere un motivo per abbandonare il resto dello script. Mantenete /persistent:no così un tentativo fallito non diventa più tardi un tentativo di riconnessione permanente.

E non mettete una password nel file. rasdial può riutilizzare le credenziali salvate per la voce VPN, e la condivisione dovrebbe autenticarsi come l'utente che ha effettuato l'accesso. Se la condivisione ha davvero bisogno di credenziali diverse, registratele una volta per utente con cmdkey invece di incorporarle in un file batch che vive su una condivisione di accesso. Chiunque possa leggere quella condivisione può leggere la password, e questo trasforma una comodità in un incidente.

Rieseguire l'intero script dovrebbe essere innocuo, perché è quello che accadrà. Gli utenti si riconnettono, i portatili si svegliano e lo stesso percorso di codice viene eseguito di nuovo con uno stato iniziale diverso.

Registrate abbastanza per dimostrare quale metà è arrivata in ritardo

Scrivete il timestamp, il risultato del controllo di disponibilità e il codice di uscita della mappatura in un file sotto il profilo dell'utente. Quando arriva la segnalazione successiva di un'unità mancante, quel registro risponde all'unica domanda che conta: il tunnel è arrivato in ritardo o la condivisione ha rifiutato?

Senza di esso, ogni ricorrenza viene indagata da zero, e la conclusione abituale è una modifica dei permessi che non sistema nulla.

Provate la sequenza una volta da un avvio a freddo e una volta dalla sospensione. Il caso del risveglio è quello in cui l'ordine si rompe più spesso, perché la sessione riprende prima della rete e lo script vede una macchina connessa da ore.

Articoli correlati