Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблемы с автоматизацией запуска VPN (http://forum.oszone.net/showthread.php?t=288131)

AlSar163 18-09-2014 14:25 2404387

Проблемы с автоматизацией запуска VPN
 
Здравствуйте, уважаемые участники форума 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".
№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 19-09-2014 21:40 2405003

Проблему удалось решить неожиданно простым способом.
Создал службу, как и раньше, но прописал обращение не к 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 22-09-2014 17:34 2405775

AlSar163, к сожалению ваш способ у меня не сработал. Появляется всё та же пара ошибок:
«Превышение времени ожидания (30000 мс) при ожидании подключения службы «vpn».»
«Сбой при запуске службы «vpn» из-за ошибки
Служба не ответила на запрос своевременно.»

AlSar163 10-10-2014 01:48 2413342

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

zhuk09 10-10-2014 08:49 2413374

Цитата:

Цитата AlSar163
Интуиция подсказывает, что решение срабатывает тогда, когда уже успела проинициализироваться
локальная сеть, и надо как-то связать этот процесс с запуском скрипта. »

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

God_Zilla 11-10-2014 11:56 2413777

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

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

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

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

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


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

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

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

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

AlSar163 11-10-2014 17:09 2413878

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

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

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

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


Время: 18:39.

Время: 18:39.
© OSzone.net 2001-