У меня установлена Windows 7, а также есть PPPoE-подключение от нашего городского кабельного провайдера.
Задача состоит в том, чтобы включать это подключение сразу же после того, как в винде поднимается подключение к локальной сети, и пользователь может быть ещё даже не вошёл в свою учётную запись.
В большинстве своём инструкции, которые можно найти в рунете, сводятся к вынесению ярлыка подключения в автозапуск. Здесь же иной случай. Необходимо, чтобы подключение производилось ещё до входа в учётную запись пользователя.
Забегая вперёд, скажу, что таким же образом можно сделать выполнение любой другой команды, причём не только при подключении к какой-либо проводной сети, но и к Wi-Fi.
Я привожу полное описание, с кучей скриншотов, как для новичков.
Итак, что у нас есть:
• Windows, в которой есть несколько учётных записей (я создал ещё одну учётку, для наглядности), и Вы не хотите делать автовход в какую-либо из них.
• Подключение с использованием PPPoE, которое необходимо включать сразу после инициализации нужной сети.
• Отсутствует роутер, который на корню решил бы эту проблему, самостоятельно подключаясь и раздавая интернет компам в локальной сети. Ну или роутер не нужен в принципе.
Выясняем уникальный идентификатор подключения (GUID)
Идём в «Пуск» – «Панель управления» – «Система и безопасность» – внизу под «Администрированием» выбираем «Просмотр журналов событий».
В открывшемся окне слева идём по такому пути: «Журналы приложений и служб»/«Microsoft»/«Windows»/«Network Profile»/«Выполняется», находим там строчки с кодом события «10000».
Cреди них находим ту, что относится к нужной сети, у меня это «Сеть 2». Переключаемся на вкладку «Подробности», и вот он, нужный нам GUID.
Сразу можно включить «Режим XML», и просмотреть кусок XML-представления «…».
В качестве ещё одного варианта, Вы можете найти нужный 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.
Материалы, которые были использованы в этом топике:
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-подключением.
ссылка на оригинал статьи http://habrahabr.ru/post/178313/
Добавить комментарий