Все ленты — последние статьи

Автозапуск подключения PPPoE без входа в учётную запись из песочницы tutorial

Автозапуск подключения PPPoE без входа в учётную запись из песочницы tutorial

Я хотел бы поведать об одном трюке, который можно провернуть при помощи планировщика заданий в Windows.
У меня установлена Windows 7, а также есть PPPoE-подключение от нашего городского кабельного провайдера.
Задача состоит в том, чтобы включать это подключение сразу же после того, как в винде поднимается подключение к локальной сети, и пользователь может быть ещё даже не вошёл в свою учётную запись.


В большинстве своём инструкции, которые можно найти в рунете, сводятся к вынесению ярлыка подключения в автозапуск. Здесь же иной случай. Необходимо, чтобы подключение производилось ещё до входа в учётную запись пользователя.
Забегая вперёд, скажу, что таким же образом можно сделать выполнение любой другой команды, причём не только при подключении к какой-либо проводной сети, но и к Wi-Fi.
Я привожу полное описание, с кучей скриншотов, как для новичков.

Итак, что у нас есть:
• Windows, в которой есть несколько учётных записей (я создал ещё одну учётку, для наглядности), и Вы не хотите делать автовход в какую-либо из них.

• Подключение с использованием PPPoE, которое необходимо включать сразу после инициализации нужной сети.
• Отсутствует роутер, который на корню решил бы эту проблему, самостоятельно подключаясь и раздавая интернет компам в локальной сети. Ну или роутер не нужен в принципе.

Выясняем уникальный идентификатор подключения (GUID)


Идём в «Пуск» — «Панель управления» — «Система и безопасность» — внизу под «Администрированием» выбираем «Просмотр журналов событий».

В открывшемся окне слева идём по такому пути: «Журналы приложений и служб»/«Microsoft»/«Windows»/«Network Profile»/«Выполняется», находим там строчки с кодом события «10000».

Cреди них находим ту, что относится к нужной сети, у меня это «Сеть 2». Переключаемся на вкладку «Подробности», и вот он, нужный нам GUID.

Сразу можно включить «Режим XML», и просмотреть кусок XML-представления «<EventData>…</EventData>».

В качестве ещё одного варианта, Вы можете найти нужный GUID в реестре по следующему пути:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles

Нужный мне GUID — «{80362A4A-DAFB-4B7E-B00C-22AC773E35A3}».
Пример XML-представления события:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-NetworkProfile" Guid="{FBCFAC3F-8459-419F-8E48-1F0B49CDB85E}" /> <EventID>10000</EventID> <Version>0</Version> <Level>4</Level> <Task>0</Task> <Opcode>0</Opcode> <Keywords>0x4000200000000000</Keywords> <TimeCreated SystemTime="2013-04-28T11:26:41.252839400Z" /> <EventRecordID>157</EventRecordID> <Correlation /> <Execution ProcessID="572" ThreadID="1664" /> <Channel>Microsoft-Windows-NetworkProfile/Operational</Channel> <Computer>HWin7VM0-PC</Computer> <Security UserID="S-1-5-19" /> </System> <EventData> <Data Name="Name">Сеть 2</Data> <Data Name="Description">Сеть</Data> <Data Name="Guid">{80362A4A-DAFB-4B7E-B00C-22AC773E35A3}</Data> <Data Name="Type">0</Data> <Data Name="State">17</Data> <Data Name="Category">1</Data> </EventData> </Event> 


Здесь я вижу, что был подключен сетевой профиль «Сеть 2», и вижу его GUID в строке «<Data Name="Guid">{80362A4A-DAFB-4B7E-B00C-22AC773E35A3}</Data>».

Создаём .bat-файл


Вам следует убедиться, что PPPoE-соединение у вас настроено так, что его могут использовать все пользователи, если Вы хотите, чтобы подключение производилось от пользователя «Система» или от другой учётной записи. Это необходимо для случая, когда у учётной записи, которую Вы обычно используете, отсутствует пароль на вход. Позже я об этом напомню ещё раз.
Я предполагаю, что соединение у Вас уже настроено, единственное, что необходимо сделать — это создать .bat-файл, в котором нужно будет написать
rasdial MyDearProvider login password
где rasdial — консольное приложение, при помощи которого можно установить соединение, «MyDearProvider» — имя PPPoE подключения, которое необходимо подключить, а «login» и «password», соответственно, логин и пароль к подключению. Сразу в консоли можете проверить, выполняется ли подключение к интернету, запустив этот файл, или можно обойтись без консоли, в целях отладки поставив в следующей строке команду «pause» и запуская файл, но не забудьте убрать потом команду pause, когда добьётесь того, что запуск .bat-файла на выполнение приведёт к подключению к интернету.

Создаём задание в планировщике


Идём в «Пуск» — «Панель управления» — «Система и безопасность» — внизу под «Администрированием» выбираем «Расписание выполнения задач».

Запустится планировщик задач, где слева нужно выбрать «Библиотека планировщика задач», и в правой части окна нажать «Создать задачу…».

В открывшемся окне на вкладке «Общие» заполняем «Имя», например, «Autoconnect_MyDearProvider», ниже в «Параметрах безопасности» выбираем нужного пользователя, от кого будет выполняться подключение, затем «Выполнять вне зависимости от регистрации пользователя», однако, если у выбранного пользователя отсутствует пароль на вход в учётную запись, то подключение не будет производиться, если пользователь не вошёл в систему. В случае, если у вас отсутствует пароль для учётной записи, выберите в качестве пользователя «система». Наивысшие права для задачи не нужны.

На вкладке «Триггеры» будет самое интересное. Нажимаем кнопку «Создать», в открывшемся окне в выпадающем списке «Начать задачу:» выбираем «При событии».
В «Дополнительных параметрах» можно настроить отложенный запуск, я поставил 15 секунд, но потом менял это значение на 5 секунд, потому что надоело ждать, когда тестировал всё это.
В «Параметрах» выбираем «Настраиваемое», чуть правее нажимаем «Создать фильтр события».

Появится окно создания фильтра события. Можно заполнить каркас для фильтра средствами, представленными на вкладке «Фильтр», а потом перейти к XML-представлению созданного фильтра.
Выбираем в поле журналов событий следующее: «Журналы приложений и служб»/«Microsoft»/«Windows»/«Network Profile»/«Выполняется». Ставим возле «Выполняется» галку.

Затем в качестве источника событий выбираем «NetworkProfile».
Код события указываем «10000».
Выглядеть это должно вот так:

Переходим на вкладку «XML», и видим следующее:

Необходимо отредактировать это, иначе триггер будет срабатывать на подключение вообще любой сети, даже на подключение самого PPPoE-подключения.
Нажимаем на галку «Изменить запрос вручную».
Появится предупреждение, что в дальнейшем мы не сможем воспользоваться вкладкой «Фильтр» для настройки этого фильтра, соглашаемся продолжить, нажимая «Да». Получаем следующее:

В месте, где у меня находится курсор (прямо перед закрывающим тегом </Select>), необходимо добавить ещё одно условие.
Дописываем туда «and *[EventData[Data[@Name='Guid']='{80362A4A-DAFB-4B7E-B00C-22AC773E35A3}']]», поменяв мой GUID «{80362A4A-DAFB-4B7E-B00C-22AC773E35A3}» на какой-то свой.

Нажимаем ОК, чтобы закрыть окно настройки фильтра, и ещё раз ОК, чтобы закрыть настройки триггера. Можете выбрать вновь созданный триггер, нажать «Изменить…», и убедиться, что в дополнительных параметрах осталась включенной настройка «Отложить на:» с нужным количеством времени, у меня эта опция почему-то не сохранилась с первого раза.
На вкладке «Действия» нажимаем «Создать», в открывшемся окне выбираем «Запуск программы», затем нажимаем «Обзор…», и указываем, где находится наш .bat-файл. Кстати, вместо того, чтобы создавать .bat-файл, можно было просто написать в поле «Программа или сценарий» команду rasdial, а в поле с аргументами вписать «MyDearProvider login password», это было бы эквивалентно запуску .bat-файла. Однако, мне кажется, удобнее править текстовый файл, чем бродить по настройкам планировщика задач в поисках нужного поля.

Нажимаем ОК, и затем переходим на вкладку «Условия».
Здесь убираем галку «Запускать только при питании от электросети», если это не нужно. Устанавливаем опцию «Запускать только при подключении к следующей сети:» — ставим ту сеть, которую только что настраивали. В этом нет необходимости, так как фильтр, настроенный ранее, уже содержит в себе это условие, однако, мало ли что может пойти не так, я решил оставить эту настройку включенной.

И, наконец, вкладка «Параметры». Здесь можно оставить включенными «Разрешать выполнение задачи по требованию» и «Принудительная остановка задачи, если она не останавливается по запросу». Нужно снять галку с «Останавливать задачу, выполняемую дольше:».
Для того, чтобы избежать такого случая, как «невозможно подключение с первого раза», можно включить галку «При сбое выполнения перезапускать через:», и выставить какой-то период ожидания, например, 1 минуту. Количество попыток перезапуска я поставил 6. Думаю уж за 6 минут-то должно подключиться.

Наконец, нажимаем «Ок», и получаем необходимое.

Справа нужно нажать на надпись «Включить журнал всех заданий», это поможет при отладке выполнения задачи. После настройки журнал можно отключить.
Переходим в «Центр управления сетями и общим доступом».

Cлева нажимаем «Изменение параметров адаптера», и попадаем в «Сетевые подключения». Выбираем «Подключение по локальной сети», отключаем его. Затем заново включаем и ждём 15 секунд (или столько, сколько настроили в триггере). Под названием PPPoE-подключения через некоторое время должен измениться статус подключения, а в журнале планировщика задач более-менее описаны происходящие события.
Далее Вы можете проверить, как компьютер ведёт себя, перезагрузив его, и дождавшись, когда появится приглашение выбрать пользователя. Если подождать некоторое время, не выбирая пользователя, винда всё равно должна подключиться к PPPoE, даже если ни один пользователь не вошёл в систему. Если у вас статический IP-адрес, тогда проверить, что компьютер подключен к интернету, легче. В моём же случае IP-адрес выдаётся динамически, поэтому я использую DDNS-сервис.
Итак, засекаем, сколько сейчас времени, чтобы потом знать, откуда смотреть логи в журнале задания, и перезагружаем компьютер.
К сожалению, в случае, когда задание выполняется от системы или от другого пользователя, отключить PPPoE-соединение будет возможно только выполнив команду «rasdial MyDearProvider /disconnect» от администратора.

Заключение


Для чего Вам это нужно — решайте сами. Мне, например, это было нужно, чтобы заходить по VNC на комп и иметь возможность перезагрузить его в случае необходимости.
Для тех, кто хочет поэкспериментировать с WiFi-подключением — необходимый журнал находится здесь: «Журналы приложений и служб»/«Microsoft»/«Windows»/«WLAN-AutoConfig»/«Operational». Там можно отловить подключение к какой-то WiFi-сети по её SSID.
UPD: Здесь кроется одно «но»: в журнал NetworkProfile не записывается код 10000 в случае, если Windows выходит из режима гибернации. Однако Windows 7 записывает событие с номером 300 в журнал Microsoft-Windows-Diagnostics-Performance. Вы можете просто добавить ещё один триггер для включения задачи. Это вполне применимо, если компьютер стационарный.

Материалы, которые были использованы в этом топике:


superuser.com/questions/262799/how-to-launch-a-command-on-network-connection-disconnection — описание создания задачи с собственным фильтром.
social.technet.microsoft.com/Forums/en-US/winservergen/thread/fac16f3c-d088-4d66-83d8-7139261dea83/ — Как выполнить трассировку сети при возникновении ошибки. Примерно то же самое, что и по предыдущей ссылке, только описания чуть поболее.
superuser.com/questions/92414/how-to-run-a-program-when-connecting-to-a-specific-network-in-windows-7 — случай с WiFi-подключением.