Мрежово устройство преди готовност на 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 файл, който живее на споделена папка за влизане. Всеки, който може да чете тази папка, може да прочете паролата и това превръща удобството в инцидент.
Повторното изпълнение на целия скрипт трябва да е безвредно, защото точно това ще се случи. Потребителите се свързват отново, лаптопите се събуждат и същият код се изпълнява отново с различно начално състояние.
Записвайте достатъчно, за да докажете коя половина е закъсняла
Запишете времевата марка, резултата от проверката за готовност и кода за изход на свързването във файл в потребителския профил. Когато пристигне следващият сигнал за липсващо устройство, този журнал отговаря на единствения важен въпрос: тунелът ли закъсня или папката отказа?
Без него всеки повторен случай се разследва от нулата и обичайното заключение е промяна в правата, която не поправя нищо.
Тествайте последователността веднъж от студено стартиране и веднъж от сън. Случаят на събуждане е мястото, където редът се чупи най-често, защото сесията се възобновява преди мрежата и скриптът вижда машина, която е влязла преди часове.