Сеткавы дыск да гатоўнасці VPN? Прывяжыце яго да сервера
Скрыпт уваходу падключае агульны рэсурс, пакуль у тунеля няма маршруту. Апытайце адзін сервер, які адказвае толькі праз яго, потым падключыце дыск у сеансе карыстальніка і запішыце вынік.
Літара дыска з'яўляецца пры ўваходзе, а затым адкрываецца як пустая папка або з чырвоным крыжыкам і паведамленнем пра недаступны сеткавы рэсурс. Дазволы звычайна ў парадку. Адбылося тое, што каманда падключэння выканалася ў той прамежак, калі кліент 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-файл, які ляжыць на агульным рэсурсе ўваходу. Любы, хто можа чытаць гэты рэсурс, можа прачытаць пароль, і гэта ператварае зручнасць у інцыдэнт.
Паўторны запуск усяго скрыпта павінен быць бясшкодным, бо менавіта гэта і адбудзецца. Карыстальнікі перападключаюцца, ноўтбукі прачынаюцца, і той жа шлях кода выконваецца зноў з іншым пачатковым станам.
Запісвайце дастаткова, каб даказаць, якая палова спазнілася
Запішыце адзнаку часу, вынік праверкі гатоўнасці і код выхаду падключэння ў файл у профілі карыстальніка. Калі прыйдзе наступная скарга пра адсутны дыск, гэты журнал адкажа на адзінае важнае пытанне: тунель прыйшоў позна ці рэсурс адмовіў?
Без яго кожны паўтор даследуецца з нуля, і звычайная выснова — змена правоў, якая нічога не выпраўляе.
Праверце паслядоўнасць адзін раз пасля халоднай загрузкі і адзін раз пасля сну. Выпадак абуджэння — гэта месца, дзе парадак ламаецца часцей за ўсё, бо сеанс аднаўляецца раней за сетку, і скрыпт бачыць машыну, якая ўвайшла шмат гадзін таму.