Управление сетями Windows с помощью сценариев. Часть 3. Общие сведения о WMI
- Управление сетями 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