Содержание
На этой неделе я наткнулся на интересную проблему. Во многих офисах или рабочих средах может потребоваться переопределить параметры сети для подключения к различным сетям. Например, некоторые люди берут свои ноутбуки с собой и имеют статический IP-адрес, настроенный специально для этого компьютера. Однако, поскольку рабочая сеть обычно является DHCP, для этого требуется, чтобы человек продолжал изменять сетевые настройки между статическим IP или автоматическим DHCP в зависимости от того, где они находятся.
Более распространенная проблема — для инженеров или ИТ-специалистов, которым часто необходимо подключаться к устройствам или компьютерам в небольшой сети внутри здания. Чтобы подключиться к этой изолированной сети, вам нужно изменить настройки сети на статический IP. Позже, когда вы снова подключитесь к корпоративной сети, он снова вернется к DHCP.
Я оказывался в этой ситуации достаточно часто и так устал от просмотра сетевой карты, открытия настроек IP и внесения этих изменений, что я решил, что пришло время собрать сценарий VB, который будет делать все это в одном или два клика. Если вы следовали моим статьям по программированию, то знаете, что я люблю сценарии VB. Я однажды использовал его, чтобы создать одержимый компьютер
, а также используется для автоматизации Microsoft SyncToy
для резервного копирования данных.
Эту задачу также можно выполнить с помощью сценария VB, и даже можно сделать его достаточно гибким, чтобы он мог принимать пользовательский ввод для статического IP-адреса. В этой статье я покажу вам, как это сделать, в трех разделах.
Создание сценария изменения настроек сети
Есть три основных задачи, которые вам нужно выполнить с помощью скрипта, чтобы создать это маленькое приложение для переключения настроек сети. Первый — использовать скрипт для создания статических настроек IP. Следующее — придумать скрипт для включения DHCP. Наконец, последнее — спросить пользователя, какую задачу он хочет выполнить, а затем использовать эту обратную связь для ее выполнения.
VB Script для установки статических настроек IP
Помните, что следующие скрипты должны быть сохранены в виде текстового файла с расширением .wsf для работы на ПК с Windows. Следующий скрипт изменит ваши сетевые настройки на статический IP с определенной маской подсети и шлюзом по умолчанию со всеми тремя жестко запрограммированными в скрипте.
Для всех примеров кода, перечисленных в этой статье, обязательно добавьте «» в начале и «в конце», иначе код не запустится.
Вот скрипт статического изменения IP:
Option Explicit On Error Resume Next Dim objWMIService Dim objNetAdapter Dim strComputer Dim arrIPAddress Dim arrSubnetMask Dim arrGateway Dim colNetAdapters Dim errEnableStatic Dim errGateways strComputer = "." arrIPAddress = Array("192.168.1.106") arrSubnetMask = Array("255.255.255.0") arrGateway = Array("192.168.1.1") Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") For Each objNetAdapter in colNetAdapters errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask) If Not errEnableStatic = 0 Then WScript.Echo "Failure assigning IP/Subnet." End If errGateways = objNetAdapter.SetGateways(arrGateway) If Not errGateways = 0 Then WScript.Echo "Failure assigning Gateway." End If Next WScript.Quit
Этот сценарий использует службу Windows WMI в Windows для достижения цели изменения настроек. Вы можете видеть три фиксированные переменные массива, загруженные с IP-адресами, и затем, где скрипт проверяет активную «активированную» сетевую карту. Затем он использует методы «EnableStatic» и «SetGateways» для внесения необходимых изменений. Когда я запускаю сценарий в моей домашней сети (где мне требуется DHCP), вы можете видеть, где сценарий успешно изменил настройки моего адаптера, и я потерял подключение к Интернету.
Доказав, что часть сценария со статическим IP-адресом работает, пришло время написать сценарий, который установит для адаптера DHCP, чтобы он автоматически определял сетевой IP-адрес. Вот сценарий, который вы можете использовать для этого.
Option Explicit On Error Resume Next Dim objWMIService Dim objNetAdapter Dim strComputer Dim errEnable strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableDHCP() Next WScript.Quit
Как видите, этот скрипт намного проще. Он также использует WMI, но единственной требуемой функцией является «EnableDHCP». Это выполняется на текущем включенном сетевом адаптере. После сохранения и запуска этого сценария настройки моей карты адаптера изменились на DHCP, и мое интернет-соединение снова заработало.
Итак, теперь, когда у вас есть код для выполнения обоих важных действий, следующей частью этого трюка будет получение информации от пользователя, чтобы точно определить, какой статический IP-адрес ему нужен. Чтобы снова включить DHCP, вы можете потребовать от пользователя ввести слово «АВТО» для автоматического определения IP.
Вот как выглядит этот новый, полный скрипт, включающий два скрипта выше.
Option Explicit On Error Resume Next Dim objWMIService Dim objNetAdapter Dim strComputer Dim arrIPAddress Dim arrSubnetMask Dim arrGateway Dim colNetAdapters Dim errEnableStatic Dim errGateways Dim strInput Dim errFailed errFailed = 0 strInput = InputBox("Type Static IP Address or AUTO") If strInput = "AUTO" Then strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") For Each objNetAdapter in colNetAdapters errEnable = objNetAdapter.EnableDHCP() If Not errEnable = 0 Then WScript.Echo "Setting DHCP Failed." errFailed = 1 End If Next Else strComputer = "." arrIPAddress = Array(strInput) arrSubnetMask = Array("255.255.255.0") arrGateway = Array("192.168.1.1") Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") For Each objNetAdapter in colNetAdapters errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask) If Not errEnableStatic = 0 Then WScript.Echo "Failure assigning IP/Subnet." errFailed = 1 End If errGateways = objNetAdapter.SetGateways(arrGateway) If Not errGateways = 0 Then WScript.Echo "Failure assigning Gateway." errFailed = 1 End If Next End If If errFailed = 0 Then WScript.Echo "IP Settings Successfully Modified." End If WScript.Quit
Этот скрипт использует функцию InputBox для получения статического IP-адреса или команды «AUTO» от пользователя.
Если в поле введено что-либо кроме «AUTO», это будет использоваться в качестве статической строки IP в разделе кода, который использует WMI для установки статических настроек IP для сетевого адаптера. Также есть проверка на «0», подтверждающая, что все прошло хорошо.
Проверив настройки моей сетевой карты после запуска скрипта, я подтвердил, что скрипт действительно изменил настройки статического IP-адреса.
Теперь протестировать скрипт AUTO. Ввод AUTO удовлетворяет первому условию в проверке оператора «IF» для AUTO. Это запускает альтернативный скрипт, который включает DHCP.
После этого я вошел в настройки адаптера и, конечно же, вернул ему значение «Получить IP-адрес автоматически».
Хотя это может быть достаточно простой задачей, чтобы зайти в настройки вашей сетевой карты и перейти на статический или DHCP, если вам придется делать это очень часто, это может стать настоящей болью. Вы можете сделать это из командной строки, используя «netsh», но опять же, вам нужно запомнить синтаксис команды.
Использование приведенного выше сценария позволяет вам создать быструю и простую утилиту, которую вы можете использовать в любое время для переключения настроек сети на лету.
Думаешь, ты мог бы попробовать этот скрипт Windows? Любые другие идеи, чтобы настроить его и сделать его еще лучше? Поделитесь своими мыслями и предложениями в разделе комментариев ниже.
Изображение предоставлено: двоичные коды через Shutterstock