Управление сетями Windows с помощью скриптов. Часть 6. Первые шаги удаленного скриптинга
- Управление сетями Windows с помощью сценариев. Часть 8. Устранение неполадок с удаленными сценариями с помощью Network Monitor 3.0
- Управление сетями Windows с помощью сценариев. Часть 9. Общие сведения об удаленных сценариях
- Управление сетями Windows с помощью скриптов. Часть 10. Приемы удаленного скриптинга
- Управление сетями Windows с помощью сценариев. Часть 11. Дополнительные приемы работы со сценариями
- Управление сетями Windows с помощью сценариев. Часть 12. Свойства класса WMI
- Управление сетями Windows с помощью сценариев. Часть 13. Удобный сценарий возврата всех значений
- Управление сетями Windows с помощью сценариев. Часть 14. Дополнительные сведения о сценариях WMI
Вернемся к разработанному нами скрипту ChangeIPAddress.vbs для изменения IP-адреса сетевого адаптера:
Опция явная
Дим objWMIService
Dim objNetAdapter
Dim strКомпьютер
Дим улАдрес
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)
Следующий
Оформите предзаказ на копию Microsoft Windows Vista Resource Kit уже сегодня!
Обратите внимание, что я удалил комментарии и код в конце, отображающий результат.
Теперь вспомните, что делает этот скрипт:
- Он подключается к пространству имен rootcimv2 на локальном компьютере.
- Он использует оператор SELECT для возврата набора конфигураций сетевых адаптеров, для которых включен и привязан протокол TCP/IP.
- Он изменяет IP-адрес адаптера на значение, указанное в качестве параметра командной строки.
Допустим, мы сохранили этот сценарий в папке C:localtest на компьютере с Windows XP со статическим IP-адресом 172.16.11.43. Затем мы открываем командную строку с учетными данными администратора на машине и используем этот скрипт, чтобы изменить IP-адрес машины на 172.16.11.54:
C:локатест> ipconfig
IP-конфигурация Windows
Ethernet-адаптер Подключение по локальной сети:
DNS-суффикс для конкретного подключения.:
Айпи адрес............: 172.16.11.43
Маска подсети...........: 255.255.255.0
Шлюз по умолчанию.........: 172.16.11.1
C:locest> ChangeIPAddress.vbs 172.16.11.54
Microsoft (R) Windows Script Host версии 5.6
Авторское право (C) Microsoft Corporation 1996-2001. Все права защищены.
C:локатест> ipconfig
IP-конфигурация Windows
Ethernet-адаптер Подключение по локальной сети:
DNS-суффикс для конкретного подключения.:
Айпи адрес............: 172.16.11.54
Маска подсети...........: 255.255.255.0
Шлюз по умолчанию.........: 172.16.11.1
C:локатест>
Подсказка №1. Помните, что для изменения IP-адреса на компьютере с Windows XP требуются учетные данные локального администратора. Поэтому, если вы в настоящее время вошли в систему как пользователь домена (как и я), вам нужно открыть командную строку и ввести runas /user:administrator cmd.exe, чтобы открыть вторую командную строку, работающую в контексте учетных данных локального администратора., а затем запустите сценарий из этой второй командной строки.
Но что, если мы хотим запустить этот сценарий на одном компьютере (скажем, xp2.contoso.com) и использовать его для изменения IP-адреса другого компьютера (скажем, xp.contoso.com)? Другими словами, мы хотим запустить сценарий удаленно на удаленном компьютере с Windows XP. Как мы можем это сделать?
Первая попытка
Давайте начнем с входа на нашу рабочую станцию администратора xp.contoso.com, используя учетные данные администратора домена Мэри Джонс, нашего администратора. Нам нужно будет сделать это, поскольку администраторы домена имеют права локального администратора на всех машинах в домене, поэтому, когда мы запускаем наш скрипт с нашей рабочей станции администратора на удаленной машине, он должен работать, верно?
Допустим, наш сценарий ChangeIPAddress.vbs находится в папке C: ools на нашей рабочей станции администратора xp.contoso.com. Давайте откроем командную строку на этом компьютере и наберем следующее:
C:Documents and Settingsmjones> компакт-диск ools
C: ools> Блокнот ChangeIPAddress.vbs
Наш скрипт открывается в Блокноте, и мы меняем эту строчку:
стрКомпьютер = «.»
читать следующее:
стрКомпьютер = «xp2»
Затем мы выбираем Файл | Сохранить, чтобы сохранить изменения, и закрыть Блокнот. Теперь запустим скрипт:
C: ools> ChangeIPAddress.vbs 172.16.11.65
Microsoft (R) Windows Script Host версии 5.6
Авторское право (C) Microsoft Corporation 1996-2001. Все права защищены.
C: oolsChangeIPAddress.vbs(20, 1) Ошибка выполнения Microsoft VBScript: удаленный сервер не существует или недоступен: «GetObject»
C:инструменты>
Обратите внимание, что требуется некоторое время, прежде чем приведенное выше сообщение об ошибке будет окончательно возвращено. Но удалась ли операция? Итак, если я войду на удаленную машину xp2.contoso.com, открою командную строку и наберу ipconfig, вот что я получу:
C:локатест> ipconfig
IP-конфигурация Windows
Ethernet-адаптер Подключение по локальной сети:
DNS-суффикс для конкретного подключения.:
Айпи адрес............: 172.16.11.43
Маска подсети...........: 255.255.255.0
Шлюз по умолчанию.........: 172.16.11.1
C:локатест>
Итак, я вижу, что адрес этой машины по-прежнему 172.16.11.43, поэтому скрипт не сработал. Крысы!
Что пошло не так? Обратите внимание, что возвращенная ошибка времени выполнения указывает на проблему с выполнением строки 20 скрипта, и вот как выглядит строка 20:
Установите objWMIService = GetObject("winmgmts:\" & strComputer & " ootcimv2")
Похоже, скрипт не может подключиться к службе WMI на удаленной машине. Что может быть причиной этого?
Вторая попытка
Возможно, это как-то связано с брандмауэром Windows на удаленной машине.
Помните, что в Windows XP SP2 есть брандмауэр, который блокирует большую часть входящего трафика, за исключением трафика, для которого настроено исключение. Самый простой способ проверить это — отключить брандмауэр Windows на целевом компьютере. Давайте сделаем это, войдя на xp2.contoso.com в качестве администратора, открыв апплет брандмауэра Windows из панели управления и выбрав параметр «Выкл.» на вкладке «Общие».
Теперь давайте снова запустим скрипт с рабочей станции администратора:
C: ools> ChangeIPAddress.vbs 172.16.11.65 Microsoft (R) Windows Script Host версии 5.6
Авторское право (C) Microsoft Corporation 1996-2001. Все права защищены.
C: oolsChangeIPAddress.vbs(23, 6) SWbemObjectEx: Ошибка удаленного вызова процедуры.
C:инструменты>
Хм, еще одна ошибка, и снова проходит много времени, пока эта ошибка не появится. Но, по крайней мере, на этот раз это другая ошибка, и она идентифицирует строку 23 как виновника, а именно:
errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Однако теперь, когда я набираю ipconfig в командной строке на удаленной машине, я получаю следующее:
C:локатест> ipconfig
IP-конфигурация Windows
Ethernet-адаптер Подключение по локальной сети:
DNS-суффикс для конкретного подключения.:
Айпи адрес............: 172.16.11.65
Маска подсети...........: 255.255.255.0
Шлюз по умолчанию.........: 172.16.11.1
C:локатест>
Итак, похоже, скрипт сработал! Мы приближаемся! Но это оставляет нас с двумя загадками:
- Мы не хотим отключать брандмауэр Windows на удаленных машинах, чтобы запускать на них сценарии. Итак, есть ли исключение, которое мы можем открыть на этих машинах, чтобы позволить удаленным сценариям запускаться на них во время работы брандмауэра Windows?
- Как насчет ошибки RPC выше? Скрипт работал, но все равно возвращал ошибку. Почему?
Исключение для удаленного выполнения сценариев
Давайте снова включим брандмауэр Windows на удаленной машине. Это заблокирует запуск нашего скрипта против него. Теперь из командной строки уровня администратора на удаленной машине введите gpedit.msc, чтобы открыть локальную групповую политику на машине, затем перейдите к следующему параметру политики (см. рис. 1):
Конфигурация компьютераАдминистративные шаблоныСетьСетевые подключенияПрофиль доменаБрандмауэр Windows: Разрешить исключение удаленного администрирования
Рисунок 1: Параметр политики брандмауэра Windows для включения удаленного администрирования
Дважды щелкните этот параметр политики и включите его для локальной подсети (рис. 2). Мы сделаем это, поскольку знаем, что наша рабочая станция администратора находится в той же подсети, что и целевой компьютер.
Рисунок 2: Включение исключения удаленного администрирования
Подсказка № 2: Конечно, вы можете сделать это по-другому и настроить этот параметр политики в объекте групповой политики домена (GPO), а не локально. Таким образом, вам не нужно прикасаться к удаленному компьютеру, чтобы включить это исключение в его брандмауэре!
Теперь давайте снова запустим скрипт с рабочей станции администратора и попробуем изменить IP-адрес удаленной машины с 172.16.11.65 на 172.16.11.66:
C: ools> ChangeIPAddress.vbs 172.16.11.66
Microsoft (R) Windows Script Host версии 5.6
Авторское право (C) Microsoft Corporation 1996-2001. Все права защищены.
C: oolsChangeIPAddress.vbs(23, 6) SWbemObjectEx: Ошибка удаленного вызова процедуры.
C:инструменты>
Та же ошибка, что и раньше, но когда я набираю ipconfig в командной строке на удаленной машине, вот что я получаю:
C:локатест> ipconfig
IP-конфигурация Windows
Ethernet-адаптер Подключение по локальной сети:
DNS-суффикс для конкретного подключения.:
Айпи адрес............: 172.16.11.66
Маска подсети...........: 255.255.255.0
Шлюз по умолчанию.........: 172.16.11.1
C:локатест>
Это сработало! Таким образом, оставив брандмауэр Windows включенным на удаленной машине, но используя групповую политику, чтобы открыть в брандмауэре окно, исключающее удаленное администрирование, мы можем удаленно изменить IP-адрес машины, запустив сценарий с рабочей станции администратора.
Итак, мы решили первую загадку, но что насчет второй?
Что ж, я люблю загадки, так что давайте оставим это до следующей статьи из этой серии.
- Управление сетями Windows с помощью сценариев. Часть 7. Устранение загадочной ошибки
- Управление сетями Windows с помощью сценариев. Часть 8. Устранение неполадок с удаленными сценариями с помощью Network Monitor 3.0
- Управление сетями Windows с помощью сценариев. Часть 9. Общие сведения об удаленных сценариях
- Управление сетями Windows с помощью скриптов. Часть 10. Приемы удаленного скриптинга
- Управление сетями Windows с помощью сценариев. Часть 11. Дополнительные приемы работы со сценариями
- Управление сетями Windows с помощью сценариев. Часть 12. Свойства класса WMI
- Управление сетями Windows с помощью сценариев. Часть 13. Удобный сценарий возврата всех значений
- Управление сетями Windows с помощью сценариев. Часть 14. Дополнительные сведения о сценариях WMI