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

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

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

Это первая из статей, посвященных управлению сетями Windows с помощью сценариев. В следующих статьях мы остановимся на детальном разборе данной темы.

О помощи людям есть известная пословица:

«Дай человеку рыбу, и ты дашь ему еду на один день. Научи его рыбачить, и ты дашь ему еду на всю жизнь.»

Справедливо, да? А в мире ИТ-профессионалов примерно то же можно сказать и про сценарии:

«Дай администратору сценарий, и ты поможешь ему решить одну проблему. Научи его писать сценарии, и ты поможешь ему облегчить его работу.»

Возможность автоматизации ежедневной работы администратора с помощью сценариев значительно облегчает жизнь администратора. Но зачем же учиться писать сценарии? Ведь на сайтах, подобных Центральному хранилищу сценариев Microsoft, можно скачать и использовать по своему усмотрению сотни сценариев! И да, и нет. Конечно, все эти сценарии полезны, но часто вам приходится изменять их для того, чтобы они соответствовали вашим требованиям или особой структуре вашего окружения. Очень часто вы жалеете, что не можете вносить в сценарии небольшие изменения, например, соединить несколько сценариев в один или использовать выходные данные одного сценария в качестве входных данных другого. Или вам нужно изменить сценарий так, чтобы контролировать ввод данных пользователем в реальном времени; или чтобы использовать его как сценарий загрузки; или чтобы сценарий работал на удаленном компьютере. И т.д., и т.п.

Если вы хотите уметь все это делать, вам нужно изучить основы написания сценариев в Windows. По счастью, это не так уж и сложно, и как раз этому и будут посвящены мои будущие статьи. Начав с основ написания сценариев Windows, вы поймете, как писать сценарии для различных аспектов сетей Windows. В конечном итоге, вы сможете писать сценарии для автоматизации всего, чего пожелаете. Помимо того, что вы сможете писать свои сценарии, вы сможете изменять и уже готовые сценарии, взятые с различных источников. Я укажу вам несколько ресурсов, которые помогут вам больше узнать о сценариях Windows, а также расскажу о некоторых средствах написания сценариев, которые могут вам понадобиться.

Установки TCP/IP в сценариях

Большинство администраторов для написания сценариев используют язык сценариев Visual Basic Script (VBScript). VBScript – это не только мощный язык для написания сценариев с достаточно простым синтаксисом. VBScript также может быть использован вместе с приложениями Windows Management Instrumentation (WMI) и Active Directory Services Interfaces (ADSI) для написания сценариев на практически любую задачу для сетей на основе Windows или Active Directory. Мы будем изучать написание сценариев для Window с использованием VBScript с WMI. Начнем с задачи, которая может быть вам полезной: изменение IP-адреса сетевого адаптера.

Зачем вам может потребоваться сделать это? К примеру, часто для установки тестового окружения я использую программы Virtual Server и Virtual PC, поэтому мне приходится периодически перемещать виртуальный компьютер с операционной системой Windows Server 2003 из одной подсети в другую для переназначения использования сервера. Это означает, что мне необходимо менять IP-адрес сервера (а, возможно, и шлюза по умолчанию). Я знаю, что сделать это можно, зайдя в Панель Управления, открыв там Сетевые подключения. Далее нужно щелкнуть правой кнопкой на значке Local Area Connections (Соединения локальной сети), выбрать Properties (Свойства), далее на вкладке General (Общие) выбрать Internet Protocol (TCP/IP) (Протокол Интернета TCP/IP), ввести новый IP-адрес и дважды нажать OK. Но я устал от всего этого, а вы? Можно еще набрать в командной строке команду Netsh, но у нее столько разных параметров, ключей и команд, что обычно приходится несколько раз перечитать файл помощи до того, как что-нибудь сделать.

Но здесь мы обучаемся написанию сценариев, так что посмотрим, как можно поменять IP-адрес с помощью VBScript и WMI. По ходу дела мы узнаем основные понятия, такие как объекты, методы, свойства, пространства имен и т.д.

Для начала запустим наш сценарий на локальном компьютере:

strComputer = «.»

Префикс str означает, что strComputer – это переменная, содержащая строку, в то время как точка заменяет локальный компьютер и используется как отправная точка пространства имен WMI. Что же такое «пространство имен WMI»? Это иерархическая структура различных классов объектов, которые можно использовать для управления разными параметрами компьютеров Windows. Например, существует корневое пространство имен, а под ним десяток пространств имен, включающих SECURITY, perfmon, CIMV2 и т.д. Большинство классов WMI, которые полезны для работы, находятся в пространстве имен root\cimv2, и прежде, чем мы сможем работать с любым из этих классов, нам необходимо переработать их в объекты. Тогда мы сможем просмотреть свойства этих объектов и вызвать их методы для управления ими.

Краткий ликбез

Классы, объекты, свойства, методы – что же это такое? Помочь может простая аналогия: представьте себе класс МикроволноваяПечь. Другими словами, абстрактный набор всевозможных микроволновых печей (а не какую-либо настоящую микроволновку). У этого класса могут быть следующие свойства: Цвет, Вместимость, НаличиеПоворотногоДиска и т.п. Свойства – это вещи, которые характеризуют класс. Другими словами, Микроволновые печи имеют определенный цвет, вместимость, у них есть или нет поворотный диск и т.п.

Класс МикроволноваяПечь обладает и методами. Методы – это то, что может делать класс, или что вы можете делать с классом. Для нашего класса в методы входит УстановкаВремениГотовки, УстановкаУровняМощности, Сброс и т.д. Обычно для вызова метода вам нужно передать ему параметры. Например, для вызова метода УстановкаВремениГотовки мы должны определить переменную ВремяГотовки в секундах и передать эту переменную методу УстановкаВремениГотовки конкретного представителя класса (настоящей микроволновой печи, а не абстрактному классу). В WMI VBScript это выглядит так:

ntCookingTime = 120
errSetCookingTime = objMicrowave.SetCookingTime(intCookingTime)

Но откуда берется объект МикроволноваяПечь (objMicrowave)? Мы его еще не создали, поэтому используем команду Set и метод CreateObject:

Set objMicrowave = CreateObject(«MicrowaveOven»)

На самом деле, если быть педантично точным, objMicrowave – это не объект МикроволноваяПечь. На самом деле, objMicrowave – это отображение объекта на представителя класса МикроволноваяПечь. Но, поскольку мы только что начали, мы не будем углубляться в такие детали.

Добавив переменную strColor, мы можем изменить свойство Цвет нашей микроволновой печи на Зеленый, и наш сценарий выглядит теперь так (добавлены комментарии):

strColor = «Green» ‘specifies color
intCookingTime = 120 ‘specifies cooking time in seconds
Set objMicrowave = CreateObject(«MicrowaveOven») ‘creates the instance of the object
errSetCookingTime = objMicrowave.SetCookingTime(intCookingTime) ‘calls a method to set the cooking time and saves resulting error code
objMicrowave.Color = strColor ‘sets the value of the Color property

Теперь все ясно, правда?

Вернемся к сценариям

Вот что нужно сделать для доступа к установкам TCP/IP локального компьютера с помощью WMI:

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

Так мы соединяемся с пространством имен root\cimv2 локального компьютера, определяя объект с именем objWMIService и устанавливая его равным дескриптору, возвращаемому методом GetObject. Соединившись с объектом, вы можете собрать о нем информацию:

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

Что это такое? Вначале, вы видите объект с именем objWMIService, который был обработан в предыдущей строке. После это этого объекта стоит ExecQuery, что является либо свойством, либо методом (всегда Объект.Свойство или Объект.Метод), и мы можем догадаться, что это метод, поскольку он называется ExecQuery (Executing a query – выполнить запрос). Метод ExecQuery вызывается передачей ему параметра, которым является выражение языка SQL (SELECT), возвращающее набор (префикс col) всех (звездочка) настроек сетевого адаптера компьютера, которые имеют привязку к TCP/IP и включены на адаптере. Набор, возвращаемый вызовом метода, затем присваивается переменной colNetAdapters, которая означает набор всех сетевых адаптеров на компьютере.

Что можно сделать с этим набором? При наличии набора, запустите по нему цикл For Each…Next:

For Each objNetAdapter in colNetAdapters
‘ do something to each network adapter’s configuration
Next

Вам всегда придется применять циклическую обработку набора, даже если в наборе всего один объект.

Теперь нам пора уже менять IP-адрес адаптера, так что определим еще несколько переменных:

arrIPAddress = Array(«172.16.11.99»)
arrSubnetMask = Array(«255.255.255.0»)

Обратите внимание, что переменные, определяющие IP-адрес и маску подсети являются переменными типа Массив. Откуда мы это знаем? Прежде всего, компьютеры Windows могут иметь более одного IP-адреса, шлюза по умолчанию и т.п. Так почему бы, чтобы быть последовательным, не использовать массив переменных для всех настроек IP? И во-вторых, если мы посмотрим на класс Win32_NetworkAdapterConfiguration в справочнике по WMI в MSDN, мы обнаружим, что так и должно быть. В будущем мы еще обратимся к Справочнику по WMI, а сейчас просто поверьте мне на слово.

Наконец, нам нужно вызвать метод EnableStatic класса Win32_NetworkAdapterConfiguration для изменения IP-адреса и шлюза по умолчанию сетевого адаптера нашего компьютера на новые значения, которые мы определили с помощью массива переменных. Делается это так:

errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)

Переменная err нужна для хранения кода ошибки, возвращаемого методом.

Соединяем все вместе

Соединим все вместе и посмотрим, что у нас получилось:

strComputer = «.»
arrIPAddress = Array(«172.16.11.99»)
arrSubnetMask = Array(«255.255.255.0»)
Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\cimv2»)
Set colNetAdapters = objWMIService.ExecQuery(«Select * from Win32_NetworkAdapterConfiguration»)
For Each objNetAdapter in colNetAdapters
errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)
Next

Вот и все, за исключением описания переменных, обработки ошибок, пользовательского ввода и вывода подтверждений. Все это мы добавим в следующий раз, а сейчас посмотрим, как это работает. Для этого я сохранил сценарий (убедившись, что в Блокноте отключена функция Word Wrap (Перенос по словам)) как файл ChangeIPAddress.vbs и скопировал его на рабочий стол сервера, статический адрес которого 172.16.11.45. Затем я зашел под учетной записью администратора в режим командной строки и запустил сценарий с помощью команды Cscript.exe – обработчик сценариев. Вот результат:

C:\Documents and Settings\Administrator\Desktop>ipconfig

Windows IP Configuration

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 172.16.11.45
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.11.1

C:\Documents and Settings\Administrator.DC-1\Desktop>cscript ChangeIPAddress.vbs

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

C:\Documents and Settings\Administrator\Desktop>ipconfig

Windows IP Configuration

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 172.16.11.99
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.11.1

Работает! Как показывает вторая команда Ipconfig, IP-адрес изменился с.45 на .99.

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 – часть ... [+]