Управление сетями Windows с помощью сценариев. Часть 3. Общие сведения о WMI

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

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

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


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

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

В своей первой статье я сделал следующий комментарий относительно этой конкретной строки: «Это соединяет вас с пространством имен rootcimv2 на локальном компьютере, определяя объект с именем objWMIService и устанавливая его равным дескриптору, возвращаемому методом GetObject».

Что это значит? Что такое WMI и как он работает? И почему это важно знать, если вы хотите научиться писать скрипты для администрирования компьютеров Windows?

Понимание WMI

WMI существует со времен Windows 98 и ранее, только тогда он назывался по-другому: Web-Based Enterprise Management (WBEM). WBEM — это технология, разработанная совместно Microsoft, Cisco, Intel, Compaq и BMC Software для упрощения управления настольными и серверными системами в корпоративных средах. WMI предоставляет модель того, как представлять, хранить и запрашивать информацию о конфигурации и состоянии, а также другие операционные аспекты компьютеров Windows. Разработчики могут использовать WMI для написания сценариев или управляемого кода для просмотра и изменения параметров конфигурации на компьютерах с Windows, для просмотра состояния приложений и служб Windows, а также для выполнения многих других действий, полезных для администраторов, которые развертывают, обслуживают и устраняют неполадки на базе Windows. сети.

Другими словами, WMI означает:

  • Windows — работает на компьютерах под управлением Microsoft Windows и для них.
  • Управление — может использоваться для управления этими компьютерами.
  • Инструментарий - предоставляет инструменты для просмотра и изменения того, что происходит под капотом этих компьютеров.

Хорошая аналогия — думать о компьютере Windows как об автомобиле, а о WMI — как об электронике (приборах), которая позволяет вашей приборной панели отображать вашу скорость, температуру двигателя, число оборотов в минуту и так далее. Эти элементы управления на приборной панели сами по себе не являются WMI — вам все еще нужно найти способ получить информацию от электроники и представить ее в удобочитаемой форме. Таким образом, написание сценариев VBScript, использующих WMI, похоже на создание элементов отображения приборной панели, которые могут подключаться к приборам под капотом вашего автомобиля и сообщать вам то, что вы хотите знать, и контролировать работу вашего двигателя. Другими словами, Windows поставляется со всем этим встроенным инструментарием через WMI — вам просто нужно выяснить, как получить к нему доступ, чтобы вы могли сделать с ним что-то полезное, например изменить свой IP-адрес, просмотреть свой часовой пояс, перезагрузить удаленную машину., отображать список установленных исправлений — что угодно.

Пространства имен WMI

Почти что угодно — ну, не совсем. На самом деле выяснение того, может ли WMI делать что-то конкретное, требует терпения и понимания. Начнем с рассмотрения пространств имен WMI. В терминологии WMI пространство имен — это своего рода логическая база данных классов и их экземпляров. Вот простой скрипт ShowNamespaces.vbs, который перечисляет все пространства имен WMI в корневом пространстве имен:

Вот результат запуска этого сценария на компьютере с Windows XP:

Каждое из этих пространств имен является возможным источником, к которому вы можете запросить информацию о состоянии или конфигурации некоторых аспектов компьютера Windows (а также часто изменить эту конфигурацию). Эти пространства имен организованы иерархически, как папки на жестком диске. Например, мы можем отобразить все пространства имен в пространстве имен rootCIMV2, изменив первую строку нашего скрипта следующим образом:

Когда вы запускаете этот модифицированный скрипт, вывод выглядит следующим образом:

Фактически, rootCIMV2 является пространством имен WMI по умолчанию на компьютерах с Windows. Это означает, что если вы не укажете пространство имен для подключения в первой строке этого скрипта, WMI по умолчанию автоматически подключится к пространству имен rootCIMV2. Итак, если мы изменим первую строку на это:

мы получаем те же результаты, что и выше. Обратите внимание, что мы также пропустили точку в winmgmts:\. ootCIMV2. Если вы помните из нашей первой статьи, эта точка представляла локальный компьютер, и по умолчанию WMI предполагает, что вы хотите работать с локальным компьютером, что означает, что вы можете опустить точку, если хотите. Однако передовой опыт написания сценариев заключается в использовании переменных (и их определении), поэтому вот более общий сценарий, который мы можем использовать для отображения пространств имен WMI:

Зачем идти на все эти проблемы? Основная причина - гибкость! Например, если нам нужно запустить скрипт на удаленном компьютере, мы можем изменить значение strComputer на IP-адрес удаленного компьютера. Или, если нам нужно отобразить другую часть пространства имен, мы могли бы добавить несколько строк в наш сценарий, чтобы принять пользовательский ввод для переменной strWMINamespace.

Поставщики WMI

Поиск подходящего пространства имен — это только первая задача (хотя в большинстве случаев будет достаточно подключения к пространству имен по умолчанию). Вы также должны получить доступ к нужному провайдеру, чтобы получить или обновить данные в системе, на которую вы нацеливаетесь. Вот сценарий ShowProviders.vbs, отображающий всех поставщиков WMI для пространства имен rootCIMV2:

А вот результат запуска этого скрипта на компьютере с Windows XP:

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

Классы WMI

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

Вот сценарий с именем ShowClasses.vbs, который отображает все классы (потенциально управляемые объекты) для пространства имен rootCIMV2:


И вот лишь часть вывода (их много!) при запуске этого скрипта в Windows XP:

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

Использование WMI

Давайте немного используем то, что мы узнали выше. Один из классов, отображаемых приведенным выше сценарием, — Win32_TimeZone, и давайте воспользуемся им для отображения часового пояса, настроенного на компьютере. Сначала нам нужно узнать больше об этом классе, и поиск «Win32_TimeZone class» открывает эту страницу в MSDN. На этой странице мы можем найти информацию о свойствах и методах, которые поддерживает этот класс (хотя на самом деле этот конкретный класс имеет только свойства, а не методы), и, используя эту информацию, мы сможем написать нужный скрипт.

Небольшой эксперимент показывает, что мы хотим отобразить именно свойство Caption, поскольку это наиболее «удобочитаемая» форма информации о часовом поясе, хранящаяся на машине. Вот сценарий с именем DisplayTimeZone.vbs, который мы будем использовать для запроса этой информации в WMI и ее отображения:

А вот результат работы этого скрипта:

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

Однако следующее утверждение является новым:

Здесь мы выполняем запрос к WMI, чтобы получить от него некоторую информацию. Запрос был определен ранее с использованием следующего оператора:

Этот SQL-оператор SELECT в основном возвращает все (звездочку), что может нам предложить провайдер Win32_TimeZone, и сохраняет результаты в коллекции с именем colItems. Затем мы перебираем каждый элемент в этой коллекции (запрос возвращает только один элемент) и отображаем свойство Caption этого элемента, которое представляет собой следующую текстовую строку:

Попробуйте это упражнение

Мы углубимся в сценарии WMI в следующих статьях этой серии, а сейчас давайте попробуем выполнить небольшое упражнение. Скопируйте содержимое сценария DisplayTimeZone.vbs выше в Блокнот (убедитесь, что перенос слов отключен) и сохраните его как PageFile.vbs. Теперь измените одну строку в сценарии (на самом деле только небольшую часть строки), чтобы при запуске сценария он отображал путь и имя файла подкачки вашей системы вместо его часового пояса. Вот подсказка: поищите в MSDN информацию о классе Win32_PageFile. Я дам вам ответ на это упражнение в следующей статье этой серии.

  • Управление сетями 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