Літера диска з'являється під час входу, а потім відкривається як порожня папка або з червоним хрестом і повідомленням про недоступний мережевий ресурс. Права зазвичай гаразд. Сталося те, що команда підключення виконалася в той проміжок, коли клієнт VPN існував, але маршруту до файлового сервера не було, і Windows записав цю невдачу як стан диска. Рішення — перестати вважати підключення чимось, що відбувається під час входу, і розглядати його як останній крок послідовності з'єднання.

Чому підключення виконується занадто рано

Скрипт входу запускається разом із сеансом. Клієнт VPN, який підключається під час входу, додає свою часову шкалу: процес може працювати, віртуальний адаптер може існувати, а маршрут до офісної підмережі може ще бути відсутнім. Ці три стани виглядають однаково з погляду скрипта, і працює лише один із них.

Деякі середовища реагують повторенням того самого невдалого рядка під час кожного входу, що створює користувача, який навчився двічі клацати диск, і скрипт, який жодного разу не спрацював сам.

Сам диск погіршує ситуацію. Підключений диск — це об'єкт сеансу, і після того як Windows позначив його як недоступний, значок може залишатися зламаним ще довго після того, як тунель став здоровим. Тому повторне підключення вручну працює, а скрипт ніби нічого не робить. Сеанс пам'ятає невдачу, а не намір за нею.

Стан «підключено» — це не шлях

Значок VPN в області сповіщень повідомляє, чи піднято тунель. Він нічого не каже про те, чи існує маршрут до конкретного сервера, чи DNS перетворює це ім'я на адресу тунелю, чи пропускає вас власний брандмауер сервера.

Це три окремі несправності з однаковим видимим результатом, і прив'язка до значка в області сповіщень зливає їх в один ненадійний сигнал.

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

Прив'яжіть до сервера, а не до клієнта

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

@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-файл, що лежить на спільному ресурсі входу. Будь-хто, хто може прочитати цей ресурс, може прочитати й пароль, а це перетворює зручність на інцидент.

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

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

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

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

Перевірте послідовність один раз після холодного завантаження і один раз після сну. Випадок пробудження — це місце, де порядок ламається найчастіше, бо сеанс відновлюється раніше за мережу, і скрипт бачить машину, що увійшла кілька годин тому.

Схожі статті