Літара дыска з'яўляецца пры ўваходзе, а затым адкрываецца як пустая папка або з чырвоным крыжыкам і паведамленнем пра недаступны сеткавы рэсурс. Дазволы звычайна ў парадку. Адбылося тое, што каманда падключэння выканалася ў той прамежак, калі кліент VPN існаваў, а маршруту да файлавага сервера не было, і Windows запісаў гэтую няўдачу як стан дыска. Рашэнне — перастаць лічыць падключэнне дыска чымсьці, што адбываецца пры ўваходзе, і разглядаць яго як апошні крок паслядоўнасці злучэння.

Чаму падключэнне адбываецца занадта рана

Скрыпт уваходу запускаецца разам з сеансам. Кліент VPN, які падключаецца падчас уваходу, дадае сваю ўласную шкалу часу: працэс можа працаваць, віртуальны адаптар можа існаваць, а маршрут да офіснай падсеткі можа ўсё яшчэ быць адсутным. Гэтыя тры станы выглядаюць аднолькава з пункту гледжання скрыпта, і працуе толькі адзін з іх.

Некаторыя асяроддзі рэагуюць тым, што паўтараюць той самы няўдалы радок пры кожным уваходзе, і гэта стварае карыстальніка, які навучыўся пстрыкаць дыск двойчы, і скрыпт, які ні разу не спрацаваў сам.

Сам дыск робіць гэта горш. Падключаны дыск — гэта аб'ект сеансу, і пасля таго як Windows пазначыў яго як недаступны, значок можа заставацца зламаным яшчэ доўга пасля таго, як тунель стаў здаровым. Вось чаму паўторнае падключэнне ўручную працуе, а скрыпт нібыта нічога не робіць. Сеанс памятае няўдачу, а не намер за ёй.

Стан «падключана» — гэта не шлях

Значок VPN у вобласці паведамленняў паказвае, ці ўзняты тунель. Ён нічога не кажа пра тое, ці існуе маршрут да пэўнага сервера, ці DNS пераўтварае гэтае імя ў адрас тунеля, ці ўласны файрвол сервера вас прымае.

Гэта тры асобныя збоі з аднолькавым бачным вынікам, і арыентацыя на значок у лотку злівае іх у адзін ненадзейны сігнал.

Праверка гатоўнасці, якая называе патрэбны вам сервер адрознівае іх, бо яна не праходзіць, пакуль не запрацуе канкрэтны шлях, а не пакуль нейкі інтэрфейс не паведаміць пра сябе як пра падключаны.

Арыентуйцеся на сервер, а не на кліент

Выберыце адзін хост, даступны толькі праз тунель, і чакайце яго, перш чым нешта падключаць. Фрагмент ніжэй падключае захаваны запіс Windows VPN, апытвае файлавы сервер і затым падключае дыск.

@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 — гэта проба гатоўнасці, а не праверка правоў. Калі ICMP фільтруецца ў вашай сетцы, замест гэтага праверце сэрвіс, які вы фактычна выкарыстоўваеце: net view \\%server% для хуткай праверкі або кароткі TCP-тэст на порт 445 у PowerShell. Любы з іх арыентуецца на тое, што мае значэнне.

Дадайце абмежаваную колькасць спроб. Цыкл чакання без столі ператварае зламаны тунель у сеанс, які ніколі не завяршае ўваход, і гэта горш за званок у падтрымку пра адсутную літару дыска.

Зрабіце гэта паўторна запускальным і ўлічвальным да сеансу

Запускайце гэта ў сеансе самога карыстальніка. Задача, якая працуе як SYSTEM, змяшчае дыск у зусім іншы сеанс, і карыстальнік, які ўвайшоў, ніколі не ўбачыць выніку. Так вы атрымаеце скрыпт, які паведамляе пра поспех, і працоўны стол без дыска.

Праверце перад падключэннем і выдаляйце толькі састарэлы запіс. net use Z: /delete вяртае памылку, калі літара не выкарыстоўваецца, і гэтую памылку бяспечна ігнараваць, а не лічыць прычынай кінуць астатнюю частку скрыпта. Пакіньце /persistent:no, каб няўдалая спроба пазней не ператварылася ў пастаянную спробу перападлучэння.

І не кладзіце пароль у файл. rasdial можа паўторна выкарыстаць уліковыя даныя, захаваныя для запісу VPN, і агульны рэсурс павінен аўтэнтыфікавацца як карыстальнік, які ўвайшоў. Калі рэсурсу сапраўды патрэбны іншыя ўліковыя даныя, зарэгіструйце іх адзін раз на карыстальніка праз cmdkey замест таго, каб убудоўваць іх у batch-файл, які ляжыць на агульным рэсурсе ўваходу. Любы, хто можа чытаць гэты рэсурс, можа прачытаць пароль, і гэта ператварае зручнасць у інцыдэнт.

Паўторны запуск усяго скрыпта павінен быць бясшкодным, бо менавіта гэта і адбудзецца. Карыстальнікі перападключаюцца, ноўтбукі прачынаюцца, і той жа шлях кода выконваецца зноў з іншым пачатковым станам.

Запісвайце дастаткова, каб даказаць, якая палова спазнілася

Запішыце адзнаку часу, вынік праверкі гатоўнасці і код выхаду падключэння ў файл у профілі карыстальніка. Калі прыйдзе наступная скарга пра адсутны дыск, гэты журнал адкажа на адзінае важнае пытанне: тунель прыйшоў позна ці рэсурс адмовіў?

Без яго кожны паўтор даследуецца з нуля, і звычайная выснова — змена правоў, якая нічога не выпраўляе.

Праверце паслядоўнасць адзін раз пасля халоднай загрузкі і адзін раз пасля сну. Выпадак абуджэння — гэта месца, дзе парадак ламаецца часцей за ўсё, бо сеанс аднаўляецца раней за сетку, і скрыпт бачыць машыну, якая ўвайшла шмат гадзін таму.

Падобныя артыкулы