Kartlegge stasjonen før VPN er klar? Gjør det avhengig av serveren
Et påloggingsskript kartlegger delingen før tunnelen har en rute. Sjekk én server som bare svarer gjennom den, kartlegg deretter i brukerens økt og logg resultatet.
Stasjonsbokstaven vises ved pålogging og åpnes deretter som en tom mappe, eller med et rødt kryss og en melding om en utilgjengelig nettverksressurs. Tillatelsene er vanligvis i orden. Det som skjedde, er at kartleggingskommandoen kjørte i vinduet der VPN-klienten fantes, men det ikke var noen rute til filserveren, og Windows registrerte den feilen som stasjonens tilstand. Løsningen er å slutte å behandle kartleggingen som noe som skjer ved pålogging, og behandle den som det siste trinnet i en tilkoblingssekvens.
Hvorfor kartleggingen kjører for tidlig
Et påloggingsskript starter når økten starter. En VPN-klient som kobler til under pålogging, legger sin egen tidslinje oppå: prosessen kan kjøre, den virtuelle adapteren kan finnes, og ruten til kontorets subnett kan fortsatt mangle. Disse tre tilstandene ser like ut fra et skripts synspunkt, og bare én av dem virker.
Noen miljøer reagerer med å gjenta den samme feilende linjen ved hver pålogging, noe som gir en bruker som har lært å klikke to ganger på stasjonen, og et skript som aldri har lykkes alene.
Selve stasjonen gjør det verre. En kartlagt stasjon er et øktsobjekt, og når Windows først har merket den som utilgjengelig, kan ikonet forbli ødelagt lenge etter at tunnelen er sunn. Derfor virker det å kartlegge på nytt manuelt, mens skriptet ser ut til ikke å gjøre noe. Økten husker feilen, ikke hensikten bak den.
Statusen tilkoblet er ikke en rute
VPN-ikonet i systemkurven forteller om tunnelen er oppe. Det sier ingenting om hvorvidt det finnes en rute til en bestemt server, om DNS løser opp det navnet til tunneladressen, eller om serverens egen brannmur slipper deg inn.
Det er tre separate feil med samme synlige resultat, og hvis man gjør ikonet i systemkurven til betingelsen, smelter de sammen til ett upålitelig signal.
En beredskapskontroll som navngir serveren du faktisk trenger skiller dem, fordi den feiler helt til den konkrete ruten virker, og ikke til en eller annen grensesnitt melder seg som tilkoblet.
Gjør serveren til betingelsen, ikke klienten
Velg én vert som bare er tilgjengelig gjennom tunnelen, og vent på den før du kartlegger noe. Utdraget nedenfor kobler til en lagret Windows VPN-oppføring, sjekker filserveren og kartlegger deretter stasjonen.
@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
Ping er en beredskapsprobe, ikke en tillatelsestest. Hvis ICMP filtreres på nettverket ditt, sjekk i stedet tjenesten du faktisk bruker: net view \\%server% for en rask kontroll, eller en kort TCP-test mot port 445 i PowerShell. Begge gjør det som betyr noe, til betingelsen.
Legg til et begrenset antall forsøk. En venteløkke uten tak gjør en ødelagt tunnel til en økt som aldri blir ferdig med å logge på, og det er en verre støttesamtale enn en manglende stasjonsbokstav.
Gjør den kjørbar på nytt og øktbevisst
Kjør den inne i brukerens egen økt. En oppgave som kjører som SYSTEM, plasserer stasjonen i en helt annen økt, og den påloggede brukeren ser aldri resultatet. Det gir deg et skript som rapporterer suksess, og et skrivebord uten stasjon.
Sjekk før du kartlegger, og fjern bare den utdaterte oppføringen. net use Z: /delete returnerer en feil når bokstaven ikke er i bruk, og den feilen er trygg å ignorere i stedet for å være grunn til å gi opp resten av skriptet. Behold /persistent:no slik at et mislykket forsøk ikke senere blir et permanent gjenoppkoblingsforsøk.
Og ikke legg et passord i filen. rasdial kan gjenbruke påloggingsinformasjonen som er lagret for VPN-oppføringen, og delingen bør autentisere som den påloggede brukeren. Hvis delingen virkelig trenger annen påloggingsinformasjon, registrer den én gang per bruker med cmdkey i stedet for å bygge den inn i en batchfil som ligger på en påloggingsdeling. Alle som kan lese den delingen, kan lese passordet, og det gjør en bekvemmelighet til en hendelse.
Å kjøre hele skriptet på nytt bør være ufarlig, for det er nettopp det som vil skje. Brukere kobler til på nytt, bærbare maskiner våkner, og den samme kodebanen kjøres igjen med en annen starttilstand.
Logg nok til å bevise hvilken halvdel som var sen
Skriv tidsstempelet, beredskapsresultatet og kartleggingens utgangskode til en fil under brukerprofilen. Når den neste rapporten om en manglende stasjon kommer, svarer den loggen på det eneste spørsmålet som betyr noe: kom tunnelen for sent, eller avviste delingen?
Uten det undersøkes hver gjentakelse fra bunnen, og den vanlige konklusjonen er en tillatelsesendring som ikke retter noe.
Test sekvensen én gang fra en kald oppstart og én gang fra dvale. Våknetilfellet er der rekkefølgen oftest bryter sammen, fordi økten gjenopptas før nettverket gjør det, og skriptet ser en maskin som har vært pålogget i timer.