Управление сетями Windows с помощью сценариев. Часть 4. Использование Win32_NetworkAdapterConfiguration

Опубликовано: 24 Марта, 2023

  • Управление сетями Windows с помощью сценариев. Часть 7. Устранение загадочной ошибки
  • Управление сетями Windows с помощью сценариев. Часть 8. Устранение неполадок с удаленными сценариями с помощью Network Monitor 3.0
  • Управление сетями Windows с помощью сценариев. Часть 9. Общие сведения об удаленных сценариях
  • Управление сетями Windows с помощью скриптов. Часть 10. Приемы удаленного скриптинга
  • Управление сетями Windows с помощью сценариев. Часть 11. Дополнительные приемы работы со сценариями
  • Управление сетями Windows с помощью сценариев. Часть 12. Свойства класса WMI
  • Управление сетями Windows с помощью сценариев. Часть 13. Удобный сценарий возврата всех значений
  • Управление сетями Windows с помощью сценариев. Часть 14. Дополнительные сведения о сценариях WMI

В первых двух статьях этой серии мы рассмотрели основы использования сценариев Windows для управления сетевыми настройками TCP/IP. В частности, мы разработали следующий простой скрипт для изменения IP-адреса сетевого адаптера:

Опция явная
При ошибке Возобновить Далее

Дим objWMIService
Dim objNetAdapter
Dim strComputer ' Можно указать IP-адрес, имя хоста или полное доменное имя
Dim strAddress 'Содержит новый IP-адрес
Dim arrIP-адрес
Dim arrSubnetMask
Dim colNetAdapters
Dim errEnableStatic

'Проверить отсутствующие аргументы

Если WScript.Arguments.Count = 0 Тогда
Wscript.Echo «Использование: ChangeIPAddress.vbs новый_IP_адрес»
WScript.Выйти
Конец, если

улКомпьютер = "."
strAddress = Wscript.Аргументы.Элемент (0)
arrIP-адрес = Массив (strAddress)
arrSubnetMask = Массив («255.255.255.0»)
Установите objWMIService = GetObject("winmgmts:\" & strComputer & " ootcimv2")
Установите colNetAdapters = objWMIService.ExecQuery («Выберите * из Win32_NetworkAdapterConfiguration, где IPEnabled = TRUE»)
Для каждого objNetAdapter в colNetAdapters
errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Следующий

'Показать результат или код ошибки

Если errEnableStatic=0 Тогда
Wscript.Echo «IP-адрес адаптера был успешно изменен на » & strAddress
Еще
Wscript.Echo «Смена адреса адаптера не удалась. Код ошибки ”& errEnableStatic
Конец, если


Оформите предзаказ на копию Microsoft Windows Vista Resource Kit уже сегодня!

Приведенный выше сценарий изменяет IP-адрес сетевого адаптера с помощью Win32_NetworkAdapterConfiguration, который является одним из наиболее полезных классов WMI для управления сетевой конфигурацией TCP/IP систем на базе Windows. В нашей третьей статье мы сделали небольшой экскурс в «Землю WMI», чтобы узнать больше о пространствах имен, провайдерах и классах WMI, чтобы мы могли лучше понять следующую загадочную строку, лежащую в основе этого скрипта:

Установите objWMIService = GetObject("winmgmts:\" & strComputer & " ootcimv2")

Если вы помните, эта строка соединяет вас с пространством имен rootcimv2 на локальном компьютере, определяя объект с именем objWMIService и устанавливая его равным дескриптору, возвращаемому методом GetObject. И, конечно же, как только вы подключитесь к этому пространству имен, вы сможете собирать из него информацию.

Однако в сегодняшней статье мы хотим сосредоточиться на строке, следующей за этой в нашем сценарии и использующей класс Win32_NetworkAdapterConfiguration:

Установите colNetAdapters = objWMIService.ExecQuery («Выберите * из Win32_NetworkAdapterConfiguration, где IPEnabled = TRUE»)

Если вы еще раз помните, что делает эта вторая строка, так это вызывает метод ExecQuery для объекта objWMIService, экземпляр которого мы создали в первой строке. Оператор SELECT передается этому методу в качестве аргумента, и коллекция всех конфигураций сетевых адаптеров в системе, для которых TCP/IP привязана и включена для адаптера, возвращается и назначается переменной colNetAdapters. Получив эту коллекцию, мы можем пройтись по ней, используя цикл For Each…Next. Помните, что вам всегда нужно перебирать коллекции, даже если в них есть только один объект.

Сегодня мы хотим задать следующий вопрос: что еще мы можем сделать с классом Win32_NetworkAdapterConfiguration?

Использование свойств и методов Win32_NetworkAdapterConfiguration

Вспомните, что свойства представляют собой информацию, которую вы можете получить из системы с помощью WMI. Чем больше свойств имеет класс WMI, тем больше информации вы можете из него извлечь. Оказывается, класс Win32_NetworkAdapterConfiguration на самом деле имеет 61 свойство, некоторые из которых уникальны, а другие унаследованы от других классов. Вы можете найти полный список свойств для класса Win32_NetworkAdapterConfiguration на странице MSDN для этого класса, которую можно найти здесь. Когда вы пытаетесь научиться создавать сценарии WMI, чтобы управлять сетями Windows с помощью сценариев, важно ознакомиться с подобной информацией WMI в MSDN, а на рис. 1 ниже показаны некоторые свойства этого класса, перечисленные на этом страница:

Изображение 20598
Рисунок 1: Свойства класса Win32_NetworkAdapterConfiguration

На приведенном выше рисунке я щелкнул ссылку для логического свойства IPEnabled, которое мы использовали в нашем скрипте для идентификации всех сетевых адаптеров в нашей системе, которые имеют привязанный и включенный TCP/IP. Мы сделали это, передав следующий SQL-запрос в качестве аргумента методу objWMIService.ExecQuery:

Выберите * из Win32_NetworkAdapterConfiguration, где IPEnabled = TRUE

Сразу видно, как мы можем расширить функциональность нашего скрипта, запросив другие свойства этого класса. Например, если мы хотим выбрать все сетевые адаптеры в нашей системе, на которых включен DHCP, нам просто нужно изменить наш оператор SELECT на это:

Выберите * из Win32_NetworkAdapterConfiguration, где DHCPEnabled = TRUE

Откуда нам это знать? Поскольку эту информацию можно найти на той же странице MSDN, что и на рисунке 2:

Изображение 20599
Рисунок 2: Свойство DHCPEnabled класса Win32_NetworkAdapterConfiguration

А как насчет методов этого класса? Вспомните, что методы — это то, что вы вызываете, чтобы выполнять различные действия с помощью WMI. Оказывается, у Win32_NetworkAdapterConfiguraiton тоже много методов, всего 41 метод. Вы можете найти методы для этого класса, перечисленные на той же странице под свойствами, как показано на рисунке 3:

Изображение 20600
Рисунок 3: Методы класса Win32_NetworkAdapterConfiguration

Вернемся ненадолго к следующему ключевому разделу нашего скрипта:

Установите objWMIService = GetObject("winmgmts:\" & strComputer & " ootcimv2")
Установите colNetAdapters = objWMIService.ExecQuery («Выберите * из Win32_NetworkAdapterConfiguration, где IPEnabled = TRUE»)
Для каждого objNetAdapter в colNetAdapters
errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Следующий

Сначала мы воспользовались свойством IPEnabled класса Win32_NetworkAdapterConfiguration, чтобы вернуть набор сетевых адаптеров, для которых привязан и включен протокол TCP/IP. Затем мы вызвали метод EnableStatic того же класса, чтобы изменить IP-адрес и маску подсети этих сетевых адаптеров, используя переменные массива arrIPAddress и arrSubnetMask, которые были определены ранее в нашем скрипте. Как мы узнали, что нам нужно передать две переменные в качестве аргументов для этого метода? Что ж, щелкнув ссылку EnableStatic на рисунке 3 выше, отобразится страница MSDN, показанная на рисунке 4, которая дает нам информацию о том, как использовать этот класс:

Изображение 20601
Рисунок 4: Подробная информация о методе EnableStatic класса Win32_NetworkAdapterConfiguration

Обратите внимание, что эта страница MSDN не только дает нам синтаксис того, как вызывать этот класс, но также дает нам возвращаемое значение и то, как интерпретировать различные условия ошибки, которые могут возникнуть. Вот почему мы использовали переменную ошибки в следующей строке нашего скрипта:

errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)

И именно поэтому мы включили следующие строки в наш скрипт, чтобы сообщить код ошибки, если возникнет состояние ошибки при запуске нашего скрипта:

Если errEnableStatic=0 Тогда
Wscript.Echo «IP-адрес адаптера был успешно изменен на » & strAddress
Еще
Wscript.Echo «Смена адреса адаптера не удалась. Код ошибки ”& errEnableStatic
Конец, если

Мы снова видим, как мы можем расширить функциональность нашего скрипта, на этот раз за счет вызова других методов этого класса. Например, предположим, что мы хотим отключить NetBIOS через TCP/IP (NetBT) на всех наших сетевых адаптерах, для которых TCP/IP привязан и включен. Просмотрев страницу MSDN в поисках страницы Win32_NetworkAdapterClass, мы находим метод SetTcpNetbios, который подходит для этого (см. рис. 5):

Изображение 20602
Рисунок 5: Метод SetTcpipNetbios класса Win32_NetworkAdapterConfiguration

При нажатии на ссылку этого метода открывается страница с информацией о том, как его использовать (рис. 6):

Изображение 20603
Рисунок 6: Подробная информация о методе SetTcpipNetbios

Мы видим, что если мы хотим отключить NetBT на наших адаптерах, все, что нам нужно сделать, это изменить следующую строку в нашем скрипте:

errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)

к этому:

errEnableStatic = objNetAdapter.SetTcpipNetbios(2)

После внесения этого изменения и очистки нашего скрипта путем удаления переменных, которые больше не нужны, и переименования других, у нас теперь есть следующий скрипт, который можно использовать для отключения NetBT на всех сетевых адаптерах, которые привязаны к TCP/IP и включены на них:

'==========================
ИМЯ: DisableNetbios.vbs
'
АВТОР: Митч Таллок
ДАТА: декабрь 2006 г.
'
«АРГУМЕНТЫ:
'1. Никто
'==========================-

Опция явная
При ошибке Возобновить Далее

Дим objWMIService
Dim objNetAdapter
Dim strComputer ' Можно указать IP-адрес, имя хоста или полное доменное имя
Dim colNetAdapters
Dim errDisableNetbios

улКомпьютер = "."
Установите objWMIService = GetObject("winmgmts:\" & strComputer & " ootcimv2")
Установите colNetAdapters = objWMIService.ExecQuery («Выберите * из Win32_NetworkAdapterConfiguration, где IPEnabled = TRUE»)
Для каждого objNetAdapter в colNetAdapters
errEnableStatic = objNetAdapter.SetTcpipNetbios(2)
Следующий

'Показать результат или код ошибки

Если errDisableNetbios=0 Тогда
Wscript.Echo «NetBIOS успешно отключен на адаптерах»
Еще
Wscript.Echo «Отключение NetBIOS не удалось. Код ошибки ”& errDisableNetbios
Конец, если

Давайте посмотрим, работает ли это. На рис. 7 показана вкладка WINS дополнительных свойств TCP/IP для подключения по локальной сети на компьютере с Windows Server 2003:

Изображение 20604
Рис. 7. Параметры NetBIOS через TCP/IP на компьютере с Windows Server 2003

Обратите внимание, что текущим параметром NetBT для этой машины является «По умолчанию», что соответствует значению 0 для метода SetTcpipNetbios (см. рис. 6 ранее). Давайте скопируем наш новый скрипт в Блокнот (убедитесь, что перенос слов отключен) и сохраним его как DisableNetbios.vbs. Затем мы запустим его на нашем сервере в окне командной строки, используя cscript (рисунок 8):

Изображение 20605
Рисунок 8: Отключение NetBIOS через TCP/IP с помощью скрипта

Теперь давайте посмотрим, сработало ли это. Нам нужно закрыть наши страницы свойств TCP/IP и снова открыть их, чтобы обновить настройку NetBT в графическом интерфейсе, который теперь выглядит следующим образом (рис. 9):

Изображение 20606
Рисунок 9: NetBT успешно отключен

Вывод

Лучший способ научиться написанию сценариев для Windows — это попробовать, поэтому вот несколько упражнений, которые вы можете выполнить самостоятельно, чтобы закрепить то, что вы узнали из этой статьи:

  1. Измените сценарий, чтобы он мог принимать аргументы, т. е. введите DisableNetbios.vbs 1, чтобы включить NetBT, DisableNetbios.vbs 2, чтобы отключить его, и DisableNetbios.vbs 0, чтобы вернуть его к настройкам по умолчанию с использованием DHCP, чтобы определить, включен или отключен NetBT для адаптер.
  2. Измените оператор SELECT в сценарии, чтобы выбрать сетевые адаптеры на основе какого-либо другого свойства класса Win32_NetworkAdapterConfiguration, и измените его, чтобы вызвать другой метод этого класса для выполнения других действий с конфигурацией TCP/IP сетевых адаптеров.
  3. Просмотрите MSDN, чтобы узнать о других классах WMI, которые могут оказаться полезными для написания сценариев для различных задач администрирования Windows.

  • Управление сетями Windows с помощью сценариев. Часть 5. Преодолеваем трудности
  • Управление сетями Windows с помощью сценариев. Часть 7. Устранение загадочной ошибки
  • Управление сетями Windows с помощью сценариев. Часть 8. Устранение неполадок с удаленными сценариями с помощью Network Monitor 3.0
  • Управление сетями Windows с помощью сценариев. Часть 9. Общие сведения об удаленных сценариях
  • Управление сетями Windows с помощью скриптов. Часть 10. Приемы удаленного скриптинга
  • Управление сетями Windows с помощью сценариев. Часть 11. Дополнительные приемы работы со сценариями
  • Управление сетями Windows с помощью сценариев. Часть 12. Свойства класса WMI
  • Управление сетями Windows с помощью сценариев. Часть 13. Удобный сценарий возврата всех значений
  • Управление сетями Windows с помощью сценариев. Часть 14. Дополнительные сведения о сценариях WMI