Sunday, November 19th, 2017

Управление сетями Windows с помощью сценариев (Часть 4)

Published on Февраль 18, 2009 by   ·   Комментариев нет

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

Option Explicit
On Error Resume Next

Dim objWMIService
Dim objNetAdapter
Dim strComputer     ' Can specify IP address or hostname or FQDN
Dim strAddress     'Contains the new IP address
Dim arrIPAddress
Dim arrSubnetMask
Dim colNetAdapters
Dim errEnableStatic

'Check for missing arguments

If WScript.Arguments.Count = 0 Then
     Wscript.Echo "Usage: ChangeIPAddress.vbs new_IP_address"
     WScript.Quit
End If

strComputer = "."
strAddress = Wscript.Arguments.Item(0)
arrIPAddress = Array(strAddress)
arrSubnetMask = Array("255.255.255.0")
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)
Next

'Display result or error code

If errEnableStatic=0 Then
     Wscript.Echo "Adapter's IP address has been successfully changed to " & strAddress
Else
     Wscript.Echo "Changing the adapter's address was not successful. Error code " & errEnableStatic
End If

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

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

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

В этой статье, мы сфокусируемся на строке, которая следует за этой в нашем сценарии, и которая позволяет использовать класс Win32_NetworkAdapterConfiguration:

Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

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

Возникает такой вопрос:”А что еще можно сделать с помощью класса Win32_NetworkAdapterConfiguration ?”

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

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

Управление сетями Windows с помощью сценариев


Рисунок 1
: Свойства класса Win32_NetworkAdapterConfiguration

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

Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE

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

Select * from Win32_NetworkAdapterConfiguration where DHCPEnabled=TRUE

Откуда мы это узнали? Эту информацию мы нашли на той же странице MSDN, как видно из рисунка 2:

Win32 networkadapterconfiguration class методы


Рисунок 2
: Свойство DHCPEnabled класса Win32_NetworkAdapterConfiguration class

Как насчет методов для этого класса? Вспомните, что методы – это то, что вы можете вызвать для выполнения различных действий с помощью WMI. Класс Win32_NetworkAdapterConfiguraiton также имеет много методов, в действительности в нем 41 метод. Вы можете найти список методов для этого класса на той же странице ниже свойств (смотри Рисунок 3):

Метод свойство


Рисунок 3
: Методы класса Win32_NetworkAdapterConfiguration

Давайте на момент вернемся к следующей основной секции в нашем сценарии:

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)
Next

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

Select from win32 networkadapterconfiguration


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

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

errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)

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

If errEnableStatic=0 Then
     Wscript.Echo "Adapter's IP address has been successfully changed to " & strAddress
Else
     Wscript.Echo "Changing the adapter's address was not successful. Error code " & errEnableStatic
End If

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

Wmi сетевой адаптер ошибки


Рисунок 5
: метод SetTcpipNetbios класса Win32_NetworkAdapterConfiguration

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

Objwmiservice dhcp server

Рисунок 6: Подробная информация, относительно метода SetTcpipNetbios

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

     errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
на такую:
     errEnableStatic = objNetAdapter.SetTcpipNetbios(2)

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

'=========================
' NAME: DisableNetbios.vbs
'
'AUTHOR: Mitch Tulloch
'DATE: December 2006
'
'ARGUMENTS:
'1. None
'=========================-

Option Explicit
On Error Resume Next

Dim objWMIService
Dim objNetAdapter
Dim strComputer     ' Can specify IP address or hostname or FQDN
Dim colNetAdapters
Dim errDisableNetbios

strComputer = "."
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.SetTcpipNetbios(2)
Next

'Display result or error code

If errDisableNetbios=0 Then
     Wscript.Echo "NetBIOS has been successfully disabled on the adapters"
Else
     Wscript.Echo "Disabling NetBIOS was not successful. Error code " & errDisableNetbios
End If

Давай проверим, работает ли этот сценарий. На рисунке 7 показана закладка WINS расширенных свойств Advanced TCP/IP Properties для локальных соединений (Local Area Connection) на компьютере с операционной системой Windows Server 2003:

Win32 networkadapterconfiguration несколько адаптеров


Рисунок 7
: Настройки NetBIOS через TCP/IP на компьютере с Windows Server 2003

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

Missing argument 4 for ssh connect


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

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

Win32 networkadapterconfiguration wins


Рисунок 9
: NetBT успешно отключен

Заключение

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

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

www.windowsnetworking.com










Смотрите также:

Tags: ,

Readers Comments (Комментариев нет)




Да человек я, человек! =)

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]