Переключение сетевых настроек в Windows с помощью VBScript

В рабочей среде часто возникает необходимость менять сетевые настройки вручную: дома ноутбук с закономерно заданным статическим IP, а в офисе — DHCP; или инженеру нужно временно подключиться к изолированной сети в здании. Открывать свойства адаптера, переключать параметры и вводить адрес аккуратно утомительно. Решение — автоматизировать процесс одним кликом.
В этой статье вы найдёте:
- скрипт для установки статического IP;
- скрипт для включения DHCP;
- объединённый скрипт с вводом от пользователя;
- практические рекомендации, контрольные проверки и варианты улучшения.
Почему стоит использовать скрипт
Коротко: экономия времени, воспроизводимость, меньше ошибок при ручном вводе.
Если вы часто переключаете конфигурации — скрипт устраняет риск опечатки (например, неверная маска подсети или шлюз) и ускоряет переходы между сетями. Он полезен системным администраторам, инженерам техподдержки и инженерам на площадках.
Важно: скрипт меняет сетевые настройки на машине, поэтому применяйте с правами администратора.
Требования и подготовка
- Windows (любой поддерживаемый выпуск, где доступен WMI).
- Права локального администратора для изменения сетевых настроек.
- Сохранение файлов как текст с расширением .wsf (если следовать примерам с тегами) или .vbs для обычного VBScript.
- Резервная запись текущих настроек (рекомендуется перед массовым применением).
Примечание: в примерах кода ниже приведены фрагменты, которые в исходной публикации автор рекомендует оборачивать так: “
Создание скрипта для установки статического IP
Ниже — простой VBScript, который жёстко задаёт IP, маску и шлюз. Сохраните как .vbs или используйте .wsf, если оборачиваете в контейнерные теги.
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Как это работает, в двух строках: скрипт обращается к службе WMI, находит все включённые сетевые адаптеры (IPEnabled=TRUE) и для каждого вызывает методы EnableStatic и SetGateways с массивами значений.
После применения статического 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Метод EnableDHCP возвращает код результата; в простом варианте мы не разбираем каждый код подробно, но рекомендуем логировать ошибки при массовых развертываниях.
Объединённый скрипт с вводом пользователя
Далее — более удобный вариант. Скрипт запрашивает у пользователя строку. Если введено AUTO, включается 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При вводе любого текста, кроме AUTO, скрипт считает это IP-адресом и подставляет его в массив arrIPAddress. Скрипт предполагает фиксированную маску 255.255.255.0 и шлюз 192.168.1.1 — измените при необходимости.
Проверки после применения
- Откройте свойства адаптера и убедитесь, что IP/маска/шлюз установлены.
- Выполните ping по шлюзу: ping 192.168.1.1.
- Проверьте маршрут и DNS, если нужно: ipconfig /all.
Когда подход не сработает или будет опасен
- Если в сети используется резервирование по MAC или таблицы DHCP, установка статического IP, уже используемого другим устройством, приведёт к конфликту IP.
- Если у адаптера сложная конфигурация (несколько шлюзов, дополнительные DNS-серверы, VLAN), простой скрипт с одним шлюзом и маской недостаточен.
- На ноутбуках с корпоративной политикой груповых политик (GPO) автоматика может вернуть настройки обратно.
Альтернативные подходы
- netsh interface ip set address name=”Ethernet” source=dhcp — команда для CMD.
- PowerShell: Set-NetIPInterface / New-NetIPAddress / Remove-NetIPAddress — современный способ с более точным контролем.
- Управление через SCCM/Intune для централизованного развёртывания настроек.
Если вы уже в окружении с центральным управлением — лучше использовать встроенные средства управления конфигурациями.
Чек‑лист перед запуском скрипта
- Сохраните текущие настройки (ipconfig /all > original_network.txt).
- Убедитесь в наличии прав администратора.
- Измените дефолтную маску и шлюз в скрипте под свою сеть (если нужно).
- Тестируйте на одном питч‑девайсе перед массовым применением.
Роль‑ориентированные задачи
- Для инженера: проверьте доступ к целевому оборудованию после переключения и зафиксируйте успешность операции в тикете.
- Для администратора сети: подготовьте список разрешённых статических IP и внесите их в инвентарь, чтобы избежать конфликтов.
- Для конечного пользователя: используйте AUTO, если вы не уверены в параметрах сети.
Критерии приёмки
- Скрипт успешно применил статический IP к включённому адаптеру и вернул 0 коды ошибок.
- При вводе AUTO адаптер переведён в DHCP и получает адрес от сервера DHCP.
- После применения выполнены ping до шлюза и DNS-резолвинг.
SOP: быстрый плейбук использования
- Сохраните текущую конфигурацию: ipconfig /all > network-before.txt.
- Откройте файл скрипта и при необходимости отредактируйте маску и шлюз.
- Запустите скрипт от имени администратора.
- Введите STATIC_IP или AUTO при запросе.
- Проверьте ipconfig и соединение (ping, доступ к ресурсам).
- При проблемах откатите через сохранённый файл или вручную восстановите параметры.
Простая методология тестирования (мини‑метод)
- Тест 1 (функциональный): введите корректный статический IP в той же подсети, проверьте связь.
- Тест 2 (пограничный): введите IP из другой подсети, ожидайте отсутствие связи и корректную установку параметров.
- Тест 3 (AUTO): проверьте, что DHCP возвращает адрес.
- Тест 4 (ошибка): введите некорректную строку (например “foobar”) и убедитесь, что скрипт не применяет некорректную конфигурацию или выводит понятную ошибку.
Критические риски и смягчение
- Конфликт IP: использовать зарегистрированный пул адресов и проверять занятость IP перед назначением.
- Потеря доступа к удалённой машине: запускать скрипт локально или через консоль с возможностью физического доступа для отката.
- Логирование: добавьте запись в файл журнала об успешности или ошибках (FSO или запись в Event Log через WMI).
Подсказки по безопасности
- Всегда запускать с наименьшими требуемыми привилегиями. Скрипт меняет системные настройки — нужны права админа.
- Не храните пароли или чувствительные данные в скриптах.
- При использовании в корпоративной среде согласуйте с отделом сетевой безопасности.
Локальные нюансы и примечания для русскоязычных сетей
- В некоторых локализациях Windows UI пункты называются «Получать IP‑адрес автоматически»; проверяйте локальный перевод при диагностике.
- Если используется статическая маршрутизация, учтите дополнительные записи в таблице маршрутов.
Быстрые варианты улучшения скрипта
- Поддержка выбора конкретного адаптера по имени или индексу.
- Возможность задавать маску и шлюз в диалоговом окне.
- Ведение логов в файл с временной меткой.
- Проверка занятости IP перед назначением (ping) и предложение альтернатив.
Шаблон принятия решений (упрощённый):
- Нужно быстро переключиться локально → использовать VBScript.
- Требуется массовое управление → использовать PowerShell + централизованное средство.
- Нужна тонкая настройка (несколько DNS, несколько шлюзов) → PowerShell.
Примеры политик развёртывания
- Локальные инженеры: пользоваться скриптом при работе на месте.
- Централизованные изменения: через Intune/SCCM с оповещением команды сети.
Фактбокс (ключевые моменты)
- Протокол: WMI (Win32_NetworkAdapterConfiguration)
- Основные методы: EnableStatic, SetGateways, EnableDHCP
- Формат скрипта: .vbs или .wsf (если используете контейнерные теги)
Краткое резюме
Использование VBScript для переключения сетевых настроек — простой и надёжный способ автоматизировать рутинную задачу. Скрипты подходят для локальной работы и тестов, но для корпоративных развёртываний стоит переходить на PowerShell или средства централизованного управления. Перед массовым применением протестируйте скрипт, подготовьте резервные копии конфигураций и внедрите базовое логирование.
Если хотите, могу помочь адаптировать скрипт под конкретную сеть (например, добавить выбор интерфейса, маски и шлюза в диалог), или преобразовать пример в PowerShell с унифицированным логированием.
Image Credit: Binary Codes via Shutterstock
Похожие материалы
Как создать игру в Tabletop Simulator
Скачать видео из Twitter — пошагово
Установка Ubuntu через Mini ISO
CAN-шина с MCP2515 и Arduino: сборка и код