A letra de unidade aparece ao iniciar sesión e despois ábrese como un cartafol baleiro, ou cunha cruz vermella e unha mensaxe sobre un recurso de rede non dispoñible. Os permisos adoitan estar ben. O que ocorreu é que o comando de asignación se executou durante a xanela na que o cliente VPN existía pero non había ningunha ruta ao servidor de ficheiros, e Windows rexistrou ese fallo como o estado da unidade. A solución é deixar de tratar a asignación como algo que ocorre ao iniciar sesión e tratala como o último paso dunha secuencia de conexión.

Por que a asignación se executa demasiado pronto

Un script de inicio de sesión comeza cando comeza a sesión. Un cliente VPN que se conecta durante o inicio de sesión engade a súa propia liña temporal por riba: o proceso pode estar en marcha, o adaptador virtual pode existir e a ruta á subrede da oficina pode seguir faltando. Eses tres estados vense iguais desde o punto de vista dun script e só un deles funciona.

Algúns contornos responden repetindo a mesma liña fallida en cada inicio de sesión, o que produce un usuario que aprendeu a facer dobre clic na unidade e un script que nunca tivo éxito por si só.

A propia unidade empeora as cousas. Unha unidade asignada é un obxecto de sesión, e unha vez que Windows a marcou como non dispoñible, a icona pode quedar rota moito despois de que o túnel estea san. Por iso reasignar a man funciona mentres o script parece non facer nada. A sesión lembra o fallo, non a intención que había detrás.

Un estado conectado non é unha ruta

A icona da VPN na bandexa indica se o túnel está levantado. Non di nada sobre se existe unha ruta a un servidor concreto, se o DNS resolve ese nome ao enderezo do túnel, nin se o cortafogos do propio servidor o acepta a vostede.

Son tres fallos separados co mesmo resultado visible, e condicionar a operación á icona da bandexa fundeos nun único sinal pouco fiable.

Unha comprobación de dispoñibilidade que nomea o servidor que realmente necesita distíngueos, porque falla ata que funciona a ruta concreta, e non ata que algunha interface se declara conectada.

Condicione ao servidor, non ao cliente

Escolla un host que só sexa alcanzable a través do túnel e agarde por el antes de asignar nada. O fragmento de abaixo conecta unha entrada de VPN de Windows gardada, sondea o servidor de ficheiros e despois asigna a unidade.

@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

O ping é unha sonda de dispoñibilidade, non unha proba de permisos. Se o ICMP está filtrado na súa rede, sondee no seu lugar o servizo que realmente usa: net view \\%server% para unha comprobación rápida, ou unha proba TCP curta contra o porto 445 en PowerShell. Calquera das dúas condiciona o elemento que importa.

Engada un número limitado de intentos. Un bucle de espera sen teito converte un túnel roto nunha sesión que nunca remata de iniciar sesión, e iso é unha chamada de soporte peor que unha letra de unidade ausente.

Fagao reexecutable e consciente da sesión

Execúteo dentro da sesión do propio usuario. Unha tarefa que se executa como SYSTEM coloca a unidade nunha sesión completamente distinta, e o usuario que iniciou sesión nunca ve o resultado. Así obtén un script que informa de éxito e un escritorio sen ningunha unidade.

Comprobe antes de asignar e elimine só a entrada obsoleta. net use Z: /delete devolve un erro cando a letra non se usa, e ese erro pódese ignorar sen problema en lugar de ser un motivo para abandonar o resto do script. Manteña /persistent:no para que un intento fallido non se converta máis tarde nun intento de reconexión permanente.

E non poña ningún contrasinal no ficheiro. rasdial pode reutilizar as credenciais gardadas para a entrada de VPN, e o recurso compartido debería autenticarse como o usuario que iniciou sesión. Se o recurso necesita de verdade credenciais distintas, rexístreas unha vez por usuario con cmdkey en lugar de incrustalas nun ficheiro batch que vive nun recurso compartido de inicio de sesión. Calquera que poida ler ese recurso pode ler o contrasinal, o que converte unha comodidade nun incidente.

Volver executar todo o script debería ser inofensivo, porque é o que vai ocorrer. Os usuarios reconéctanse, os portátiles espertan e o mesmo camiño de código execútase outra vez cun estado inicial distinto.

Rexistre o suficiente para demostrar que metade chegou tarde

Escriba a marca de tempo, o resultado da comprobación de dispoñibilidade e o código de saída da asignación nun ficheiro baixo o perfil do usuario. Cando chegue o seguinte informe dunha unidade ausente, ese rexistro responde á única pregunta que importa: chegou tarde o túnel ou rexeitou o recurso compartido?

Sen el, cada reaparición investígase desde cero, e a conclusión habitual é un cambio de permisos que non arranxa nada.

Probe a secuencia unha vez desde un arranque en frío e outra desde a suspensión. O caso de espertar é onde a orde se rompe máis a miúdo, porque a sesión retómase antes que a rede e o script ve unha máquina que leva horas coa sesión iniciada.

Artigos relacionados