Управление сетями Windows с помощью сценариев — часть 1: основы

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

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

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


Получите свою копию Windows Server Hacks!

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

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

Ничто не может быть правдивее, верно? Что ж, в занятом мире ИТ-специалистов то же самое верно и для сценариев, т.е.:

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

Возможность автоматизировать ежедневные задачи администрирования с помощью скриптов может значительно облегчить жизнь администратора. Но зачем учиться писать сценарии? Разве нет сотен сценариев, которые вы можете загрузить с таких сайтов, как Microsoft Script Center Script Repository, и использовать в соответствии со своими потребностями? Ну да и нет. Да, эти сценарии полезны, но часто вам придется настраивать их в соответствии с вашими конкретными потребностями или из-за конкретной конфигурации вашей среды. Часто вам захочется каким-то образом изменить эти скрипты, чтобы заставить их делать что-то, немного отличающееся от того, что имели в виду авторы скриптов, например, путем объединения нескольких скриптов вместе в один более крупный скрипт или использования вывода одного скрипта в качестве ввод для другого. Или вы можете захотеть изменить один из этих сценариев, чтобы вы могли вводить пользовательский ввод во время выполнения. Или вы можете изменить сценарий, чтобы его можно было использовать в качестве сценария запуска или входа в систему. Или вы можете изменить сценарий, чтобы он работал на удаленном компьютере. И так далее.

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

Сценарии настроек TCP/IP

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

Почему вы хотите это сделать? Что ж, я часто использую Virtual Server и Virtual PC для настройки тестовых сред, и мне часто приходится перемещать виртуальную машину (ВМ) под управлением Windows Server 2003 из одной виртуальной сети в другую, чтобы перепрофилировать сервер для какой-то другой. использовать. Обычно это означает, что мне нужно изменить IP-адрес на сервере (и, возможно, шлюз по умолчанию). Теперь я знаю, что вы можете сделать это, открыв «Сетевые подключения» на панели управления, щелкнув правой кнопкой мыши «Подключения по локальной сети», выбрав «Свойства» и выбрав «Протокол Интернета (TCP/IP)» на вкладке «Общие», щелкнув «Свойства», введя новый IP-адрес и нажав «ОК». дважды, но я устаю от этого, а вы? И да, я мог бы открыть командную строку и использовать команду Netsh, но у Netsh так много разных контекстов, команд и параметров, что мне обычно приходится читать справочную информацию Netsh снова и снова, прежде чем я, наконец, все сделаю правильно.

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

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

Здесь префикс str- означает, что strComputer — это переменная, содержащая строку, а точка — это подстановочный знак, который указывает на локальный компьютер и используется в качестве отправной точки пространства имен WMI. Что такое пространство имен WMI? Это иерархический набор различных классов объектов, которые можно использовать для управления различными аспектами компьютеров Windows. Например, есть корневое пространство имен, а под ним около дюжины пространств имен, включая SECURITY, perfmon, CIMV2 и так далее. Большинство классов WMI, с которыми полезно работать, находятся в пространстве имен rootcimv2, и прежде чем мы сможем работать с любым из этих классов, нам нужно преобразовать их в объекты. Затем мы можем просматривать свойства этих объектов и вызывать их методы для управления ими.

Краткий экскурс

Классы, объекты, свойства, методы — что это? Вот простая аналогия, которая может помочь: рассмотрим класс MicrowaveOven. Другими словами, абстрактный набор всех возможных микроволновых печей (а не какой-то конкретной реальной печи). Этот класс может иметь следующие свойства: Color, CubicInches, HasTurntable и так далее. Свойства — это вещи, которые являются характеристиками класса. Другими словами, у микроволновых печей есть определенный цвет, определенный внутренний размер в кубических дюймах, в них либо есть поворотные столы, либо нет, и так далее.

Класс MicrowaveOven также имеет методы. Методы — это то, что может делать класс или что вы можете делать с классом. Для этого конкретного класса некоторые методы могут включать SetCookingTime, SetPowerLevel, Reset и т. д. Обычно для вызова метода необходимо передать ему параметр. Например, чтобы вызвать метод SetCookingTime, мы можем определить переменную CookingTime в секундах, а затем передать эту переменную методу SetCookingTime для конкретного экземпляра этого класса (настоящей, реальной микроволновой печи, а не абстрактного класса). В WMI VBScript это можно сделать следующим образом:


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

На самом деле, если быть точным, objMicrowave не является объектом MicrowaveOven. Вместо этого objMicrowave является ссылкой на объект экземпляра класса MicrowaveOven. Но мы только начинаем здесь, поэтому мы не будем выбирать слишком много гнид.

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





Все это имеет смысл, не так ли?

Назад к сценарию

Вот что вам нужно сделать, если вы хотите получить доступ к параметрам конфигурации TCP/IP вашего компьютера с помощью WMI:

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

Что это делает? Во-первых, вы можете увидеть объект с именем objWMIService, экземпляр которого мы только что создали в предыдущей строке. После этого объекта следует ExecQuery, который является либо свойством, либо методом (это всегда object.property или object.method), и мы можем догадаться, что это метод из-за формулировки, т.е. выполнения запроса. Метод ExecQuery вызывается путем передачи ему параметра, и этот параметр является оператором SQL (SELECT), который возвращает коллекцию (префикс col) всех конфигураций сетевого адаптера (звездочка) на машине, к которой привязан TCP/IP. и включен на адаптере. Коллекция, возвращаемая вызовом этого метода, затем присваивается переменной colNetAdapters, которая обозначает коллекцию всех сетевых адаптеров на машине.

Что мы можем сделать с этой коллекцией? Когда у вас есть коллекция, вы должны пройти через нее, используя цикл For Each…Next следующим образом:



Вы всегда должны перебирать такие коллекции, даже если в коллекции есть только один объект.

Теперь то, что мы действительно хотим сделать, это изменить IP-адрес нашего адаптера, поэтому давайте определим еще несколько переменных:


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

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

Здесь переменная err необходима как место для хранения кода ошибки, возвращаемого при запуске метода.

Собираем все вместе

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








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








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

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