Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Ответить
Аватара пользователя
AlSar163

Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение AlSar163 »

Здравствуйте, уважаемые участники форума OSzone.net!



Передо мной встала такая задача: создать способ автоматического запуска VPN-соединения

для подключения к интернету после включения ПК, который бы удовлетворял следующим критериям:

1) был бы универсален для WinXP x86 и Win7 x64;

2) срабатывал бы сразу при запуске ОС, еще до входа в систему, стабильно и гарантированно в 100% случаев;

3) не выводил бы никаких окон, не вылазил бы в трее и вообще никак бы себя не проявлял;

4) был бы максимально изящным решением и настраивался после установки ОС буквально в несколько кликов.



Изучив много источников в интернете по этому вопросу, я конечно же отмел примитивное

помещение ярлыков в автозагрузку, не удовлетворяющее критерию №2, работу с планировщиком

задач, не подходящую по критерию №4, вызов rasdial при помощи bat-файлов, не устраивающий

по критерию №3 и остановился на решении данного вопроса при помощи создания твика реестра.



Для того, чтобы обеспечить критерий №3, я худо-бедно ознакомился с VBS-скриптами,

и создал скрипт обращения к rasdial, наиболее простой по виду, даже не знаю, можно ли еще что-то упростить.

Содержание скрипта PROVIDER.vbs следующее (предполагая подключение PROVIDER по логину login и паролю pass):



Код:

Код: Выделить всё

CreateObject("WScript.Shell").Run "rasdial PROVIDER login pass", 0, false

Скрипт успешно заработал, и я перешел к процессу автоматизации его исполнения. Для этой цели я сперва

разместил PROVIDER.vbs в папке system32, а затем создал твик реестра PROVIDER.reg такого содержания:



Код:

Код: Выделить всё

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"PROVIDER"="PROVIDER.vbs"

И на данном этапе я и столкнулся с проблемами. VPN-соединение подключается, но через раз.

Я пробовал обращаться к VBS-скрипту по разному, напрямую и через wscript, такими способами:



Код:

Код: Выделить всё

"PROVIDER"="PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\PROVIDER.vbs"
"PROVIDER"="wscript PROVIDER.vbs"
"PROVIDER"="wscript.exe PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\wscript.exe PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\wscript.exe C:\\WINDOWS\\System32\\PROVIDER.vbs"

Но никакой из этих способов не приводил к гарантированной работе. Примерно в 50% случаев

соединение устанавливалось почти сразу, а другая половина запусков ОС была безуспешна.

Интуиция подсказывает, что решение срабатывает тогда, когда уже успела проинициализироваться

локальная сеть, и надо как-то связать этот процесс с запуском скрипта.

Тогда я решил попробовать пойти путем создания системной службы, написав такой файл PROVIDER.bat:



Код:

Код: Выделить всё

sc create PROVIDER start= auto binPath= "rasdial PROVIDER login pass" DisplayName= "PROVIDER" depend= lanmanworkstation obj= "NT AUTHORITY\LocalService"

Однако и в этот раз - фиаско. Хотя служба успешно создается, и есть зависимость от "Рабочей станции",

но в отличие от 50%-ной работы ссылки в реестре не работает вообще.

Журнал событий Windows выдает последовательно следующую пару ошибок:

№1:

Превышение времени ожидания (30000 мс) при ожидании подключения службы "PROVIDER".[/i]

№2:

Сбой при запуске службы "PROVIDER" из-за ошибки

Служба не ответила на запрос своевременно.




Дальнейшие поиски по данному вопросу ни к чему не привели. Предлагался только кривой вариант в виде создания

задержки bat-файлом, минуту пингуя несуществующий локальный IP-адрес, но это же полная чушь...



Обращаюсь к вам, уважаемые форумчане.

Какова ошибка в моих действиях?

Правильно ли предположение о том, что скрипт не работает из-за отсутствия корреляции с lanmanworkstation?

Что же мне предпринять, как создать рабочую службу или хотя бы правильный твик реестра?



Заранее спасибо за внимание.

С уважением, Александр.



P.S. В данный момент тестирую на Win7 Ultimate SP1 x64.



UPD



Я продолжаю экспериментировать, но безуспешно.

По совету товарища попробовал переписать PROVIDER.reg с HKLM на HKCU, вроде бы ветка считывается попозже.

Но так же, как и в случае с HKLM, запускается все равно через раз.

Затем я попробовал создать службу с указанием не rasdial, a скрипта:



Код:

Код: Выделить всё

binPath= "wscript PROVIDER.vbs"

Все продолжилось с теми же ошибками. Добавление в зависимости lanmanserver тоже не привело к успеху.



Я теряюсь в догадках, что еще можно сделать в этом положении...
Аватара пользователя
AlSar163

Re: Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение AlSar163 »

Проблему удалось решить неожиданно простым способом.

Создал службу, как и раньше, но прописал обращение не к rasdial, а к имеющемуся скрипту.

Ну и для автоматизации прописал копирование скрипта в System32. Получился такой bat-файл:



Код:

Код: Выделить всё

copy PROVIDER.vbs %windir%\System32\PROVIDER.vbs
sc create PROVIDER start= auto binPath= "wscript PROVIDER.vbs" depend= lanmanworkstation obj= "NT AUTHORITY\LocalService" DisplayName= "PROVIDER"

Недостаток - в "Журнале событий" все равно выдается та же самая пара ошибок, не устраняемая даже если задать перезапуски при сбое.

Достоинство - это гарантированно работает, соблюдая все мои критерии и устанавливается в один двойной клик.

Проблему можно считать решенной, а тему - закрыть. Жаль, правда, что никто так и не высказался по этой проблеме.



С уважением, Александр.
Аватара пользователя
Lyrot

Re: Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение Lyrot »

AlSar163, к сожалению ваш способ у меня не сработал. Появляется всё та же пара ошибок:

«Превышение времени ожидания (30000 мс) при ожидании подключения службы «vpn».»

«Сбой при запуске службы «vpn» из-за ошибки

Служба не ответила на запрос своевременно.»
Аватара пользователя
AlSar163

Re: Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение AlSar163 »

Lyrot, у меня тоже сохраняется эта пара ошибок. Но почему-то подключение срабатывает.

У вас сам скрипт при запуске вручную работает?
Аватара пользователя
zhuk09

Re: Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение zhuk09 »

Цитата AlSar163:



Интуиция подсказывает, что решение срабатывает тогда, когда уже успела проинициализироваться

локальная сеть, и надо как-то связать этот процесс с запуском скрипта.
Любой язык - [решено] Проблемы с автоматизацией запуска VPN




Попробуйте задать в параметрах локальной политики "Ждать сеть при запуске и входе в систему" Конфигурация компьютера\Административные шаблоны\Система\Вход в систему\Всегда ждать запуска сети при запуске и входе в систему
Аватара пользователя
God_Zilla

Re: Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение God_Zilla »

Долго искал решение задачи подключения VPN из командной строки в cmd/bat скрипте.



Одно из условий: не оперировать в скрипте логином и паролем т.к. это очень ненадежно, к тому же они могут изменяться.



В итоге сделал просто: Создал ярлык для VPN подключения, обозвал его MaglanInternet.lnk, положил в один каталог с батником и при необходимости подключить vpn из батника делаю это командой:



Код:

Код: Выделить всё

start MaglanInternet.lnk

Если возникает необходимость отключить vpn из скрипта, делаю это командой:



Код:

Код: Выделить всё

rasdial "MaglanInternet" /DISCONNECT

*Где "MaglanInternet" - название vpn подключения.[/i]





Что касательно задачи автора поста, то можно было создать ярлык vpn подключения и скопировать его в аутозагрузку. А чтобы не выводилось никаких окон и сообщения достаточно в свойствах этого подключения снять соответствующие галочки.



Примечательно что командами



Код:

Код: Выделить всё

netsh interface set interface "ИМЯПОДКЛЧЮЕНИЯ" disabled
netsh interface set interface "ИМЯПОДКЛЧЮЕНИЯ" enable

можно включать и выключать практически любые соединения кроме VPN.
Аватара пользователя
AlSar163

Re: Любой язык - [решено] Проблемы с автоматизацией запуска VPN

Сообщение AlSar163 »

zhuk09, а разве зависимость от lanmanworkstation - это не то же самое?

И да, исходная задача состояла в том, чтобы автоматизация настраивалась в пару кликов после установки. А не путем лазанья в политиках, планировщиках и т.п.



God_Zilla, ну в моем случае логин\пароль неизменны уже более 5 лет, если уж изменятся, можно и отредактировать скрипт. А насчет надежности... Ну у меня ничего не расшарено, Wi-Fi не раздаю, просто одно подключение для одного ПК, тут не вижу какой-то особой проблемы.


Цитата God_Zilla:



Что касательно задачи автора поста, то можно было создать ярлык vpn подключения и скопировать его в аутозагрузку. А чтобы не выводилось никаких окон и сообщения достаточно в свойствах этого подключения снять соответствующие галочки.
Любой язык - [решено] Проблемы с автоматизацией запуска VPN




Ну вы сейчас просто Капитана Очевидность отыграли, хех. Как бы этот способ лежит на поверхности. Ну и надежности нет никакой. Пользовался подобным с момента подключения к технологии VPN. Работа с вероятностью даже не 50/50, а меньше. Если и локалка проинициализируется, и звезды сойдутся, то да, сработает. Я написал в самом начале поста, что это я сразу отмел. Если в вашем случае это всегда работает, ну что ж - вам повезло.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»