Управление сетями Windows с помощью сценариев. Часть 4. Использование Win32_NetworkAdapterConfiguration
- Управление сетями 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 ниже показаны некоторые свойства этого класса, перечисленные на этом страница:
Рисунок 1: Свойства класса Win32_NetworkAdapterConfiguration
На приведенном выше рисунке я щелкнул ссылку для логического свойства IPEnabled, которое мы использовали в нашем скрипте для идентификации всех сетевых адаптеров в нашей системе, которые имеют привязанный и включенный TCP/IP. Мы сделали это, передав следующий SQL-запрос в качестве аргумента методу objWMIService.ExecQuery:
Выберите * из Win32_NetworkAdapterConfiguration, где IPEnabled = TRUE
Сразу видно, как мы можем расширить функциональность нашего скрипта, запросив другие свойства этого класса. Например, если мы хотим выбрать все сетевые адаптеры в нашей системе, на которых включен DHCP, нам просто нужно изменить наш оператор SELECT на это:
Выберите * из Win32_NetworkAdapterConfiguration, где DHCPEnabled = TRUE
Откуда нам это знать? Поскольку эту информацию можно найти на той же странице MSDN, что и на рисунке 2:
Рисунок 2: Свойство DHCPEnabled класса Win32_NetworkAdapterConfiguration
А как насчет методов этого класса? Вспомните, что методы — это то, что вы вызываете, чтобы выполнять различные действия с помощью WMI. Оказывается, у Win32_NetworkAdapterConfiguraiton тоже много методов, всего 41 метод. Вы можете найти методы для этого класса, перечисленные на той же странице под свойствами, как показано на рисунке 3:
Рисунок 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, которая дает нам информацию о том, как использовать этот класс:
Рисунок 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):
Рисунок 5: Метод SetTcpipNetbios класса Win32_NetworkAdapterConfiguration
При нажатии на ссылку этого метода открывается страница с информацией о том, как его использовать (рис. 6):
Рисунок 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:
Рис. 7. Параметры NetBIOS через TCP/IP на компьютере с Windows Server 2003
Обратите внимание, что текущим параметром NetBT для этой машины является «По умолчанию», что соответствует значению 0 для метода SetTcpipNetbios (см. рис. 6 ранее). Давайте скопируем наш новый скрипт в Блокнот (убедитесь, что перенос слов отключен) и сохраним его как DisableNetbios.vbs. Затем мы запустим его на нашем сервере в окне командной строки, используя cscript (рисунок 8):
Рисунок 8: Отключение NetBIOS через TCP/IP с помощью скрипта
Теперь давайте посмотрим, сработало ли это. Нам нужно закрыть наши страницы свойств TCP/IP и снова открыть их, чтобы обновить настройку NetBT в графическом интерфейсе, который теперь выглядит следующим образом (рис. 9):
Рисунок 9: NetBT успешно отключен
Вывод
Лучший способ научиться написанию сценариев для Windows — это попробовать, поэтому вот несколько упражнений, которые вы можете выполнить самостоятельно, чтобы закрепить то, что вы узнали из этой статьи:
- Измените сценарий, чтобы он мог принимать аргументы, т. е. введите DisableNetbios.vbs 1, чтобы включить NetBT, DisableNetbios.vbs 2, чтобы отключить его, и DisableNetbios.vbs 0, чтобы вернуть его к настройкам по умолчанию с использованием DHCP, чтобы определить, включен или отключен NetBT для адаптер.
- Измените оператор SELECT в сценарии, чтобы выбрать сетевые адаптеры на основе какого-либо другого свойства класса Win32_NetworkAdapterConfiguration, и измените его, чтобы вызвать другой метод этого класса для выполнения других действий с конфигурацией TCP/IP сетевых адаптеров.
- Просмотрите 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