Wmi протокол что это

Инструментарий управления Windows (WMI)

Назначение

Эта документация предназначена для разработчиков и ИТ-администраторов. Если вы являетесь конечным пользователем, у которого есть сообщение об ошибке, связанное с WMI, перейдите в Служба поддержки Майкрософти найдите код ошибки, отображаемый в сообщении об ошибке. Дополнительные сведения об устранении неполадок со сценариями WMI и службой WMI см. в разделе инструментарий WMI не работает.

Инструментарий WMI полностью поддерживается корпорацией Майкрософт. однако последняя версия административных сценариев и управления доступна в инфраструктуре управления Windows (MI). MI полностью совместима с предыдущими версиями инструментария WMI и предоставляет ряд функций и преимуществ, упрощающих разработку и разработку поставщиков и клиентов проще, чем когда-либо. дополнительные сведения см. в статье Windows Management Infrastructure (MI).

Где применим Инструментарий WMI?

инструментарий WMI можно использовать во всех приложениях на основе Windows и наиболее полезен в корпоративных приложениях и административных сценариях.

Системные администраторы могут найти сведения об использовании WMI в различных книгах об инструментарии WMI. Дополнительные сведения см. в разделе Дополнительные сведения.

Аудитория разработчиков

инструментарий WMI предназначен для программистов, использующих C/C++, приложение Microsoft Visual Basic или язык сценариев, который имеет механизм на Windows и обрабатывает объекты Microsoft ActiveX. Хотя очень хорошо известно, что программирование COM является полезным, разработчики C++, пишущие приложения, могут найти хорошие примеры для начала работы с созданием приложения WMI с помощью C++.

Требования к среде выполнения

Дополнительные сведения о том, какая операционная система необходима для использования определенного элемента API или класса WMI, см. в разделе «требования» каждого раздела документации по инструментарию WMI.

Для создания сценариев или приложений для WMI не нужно скачивать или устанавливать определенную разработку программного обеспечения (SDK). Однако существуют некоторые средства администрирования WMI, которые могут оказаться полезными для разработчиков. Дополнительные сведения см. вразделе «загрузки» этой статьи.

Источник

Сведения об инструментарии WMI

Инструментарий управления Windows (WMI) разработан корпорацией Майкрософт в рамках отраслевой инициативы управления предприятием через Интернет (WBEM), целью которой является создание стандартной технологии получения доступа к информации по управлению в среде предприятия. В инструментарии WMI используется модель CIM — отраслевой стандарт, служащий для представления систем, приложений, сетей, устройств и других управляемых компонентов. Модель CIM разрабатывается и обслуживается с помощью распределенной задачи управления Force (DMTF).

в настоящее время доступна версия WMI следующего поколения, известная как инфраструктура управления Windows (MI). MI полностью совместима с предыдущими версиями инструментария WMI и предоставляет ряд функций и преимуществ, упрощающих разработку и разработку поставщиков и клиентов проще, чем когда-либо. Например, многие новые поставщики пишутся с помощью платформы MI, но доступ к ним можно получить с помощью скриптов и приложений WMI. Дополнительные сведения о различиях между двумя технологиями см. в разделе Зачем использовать MI?

Управление удаленными системами компьютеров с помощью инструментария WMI

Ценность WMI заключается в возможности получать данные об управлении с удаленных компьютеров. Удаленные подключения WMI осуществляются посредством DCOM. альтернативой является использование служба удаленного управления Windows (WinRM), которое получает данные удаленного управления WMI с помощью протокола на основе WS-Management SOAP.

Программирование с помощью WMI

Приложения или скрипты управления могут получать данные или выполнять операции через инструментарий WMI на различных языках. дополнительные сведения см. в разделе «аудитория разработчика» на инструментарий управления Windows (WMI).

многие функции Windows имеют связанные с ними поставщики WMI, например поставщик данные конфигурации загрузки (BCD) или поставщик томов служба хранилища. поставщики wmi реализуют функциональные возможности, описанные в разделе методы и свойства классов WMI для управления связанными Windowsными функциями. Дополнительные сведения см. в разделе поставщики WMI и классы WMI.

Дополнительные сведения о создании поставщика для передачи данных из нового оборудования или приложений см. в разделе Предоставление данных инструментарию WMI.

Дополнительные сведения о реализации этой технологии см. в разделе Использование инструментария WMI.

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

Источник

Администрирование с помощью WMI

В основе структуры данных в WBEM лежит Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы. CIM является расширяемой моделью, что позволяет программам, системам и драйверам добавлять в нее свои классы, объекты, методы и свойства.

WMI, основанный на CIM, также является открытой унифицированной системой интерфейсов доступа к любым параметрам операционной системы, устройствам и приложениям, которые функционируют в ней.

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

Так как WMI построен по объектно-ориентированному принципу, то все данные операционной системы представлены в виде объектов и их свойств и методов.

Все классы группируются в пространства имен, которые иерархически упорядочены и логически связаны друг с другом по определенной технологии или области управления. В WMI имеется одно корневое пространство имен Root, которое в свою очередь имеет 4 подпространства: CIMv2, Default, Secutiry и WMI.

Классы имеют свойства и методы и находятся в иерархической зависимости друг от друга, то есть классы-потомки могут наследовать или переопределять свойства классов-родителей, а также добавлять свои свойства.

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

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

Пример обращения к процессу с именем «Calc.exe», который запущен на локальной машине:

Экземпляры классов могут генерировать события, к которым можно подписываться. При наступлении события WMI автоматически создает экземпляр того класса, которому соответствует это событие. Такой механизм удобно использовать для выполнения определенной команды при наступлении определенного события, то есть следить за состоянием объектов операционной системы.

Общая безопасность в WMI реализуется на уровне операционной системы, а дополнительная политика безопасности основана на уровнях пространств имен и протокола DCOM. То есть если пользователь не имеет права делать какое-то действие через операционную систему, он не сможет это сделать и через WMI. Если же пользователю дано какое-то право в операционной системе, то это еще не означает, что это право будет и в WMI, так как в WMI действуют дополнительные параметры безопасности на уровне пространств имен.

Каждый объект операционной системы имеет свое описание безопасности (SD) со своим списком доступа (ACL), в котором перечислены идентификаторы пользователей (SID) и их привилегии. Каждое пространство имен может иметь собственное SD со своим ACL, где пользователям могут быть назначены разрешения на чтение данных, выполнение методов, запись классов и данных и другие. Данные о дополнительных разрешениях хранятся в репозитории WMI. Отдельные классы из пространств имен не имеют собственных описаний безопасности, они наследуют их от своего пространства имен.

По умолчанию администратор компьютера имеет полные права на использование WMI, а остальные пользователи могут лишь вызывать методы, считывать данные и записывать в репозиторий экземпляры классов провайдеров WMI.

Для доступа к инфраструктуре WMI используется протокол DCOM, через который пользователь подключается к WMI. Чтобы определить, какие права будут у подключившегося пользователя, используется механизмы олицетворения и аутентификации протокола DCOM.

Уровни олицетворения могут принимать следующие значения:

Уровни аутентификации (подлинности) могут принимать следующие значения:

NoneОтсутствуетПроверка подлинности отсутствует
DefaultПо умолчаниюСтандартные настройки безопасности, которые задаются компьютером-целью команды
ConnectПодключениеПроверка только во время подключения к компьютеру-цели команды, проверка в ходе работы отсутствует
CallВызовПроверка подлинности при каждом запросе к компьютеру-цели команды, заголовки пакетов подписываются, но содержимое не шифруется
PktПакетПроверка подлинности всех пакетов к компьютеру-цели команды, заголовки пакетов подписываются, но содержимое не шифруется
PktIntegrityЦелостность пакетаПроверка подлинности и целостности всех пакетов к компьютеру-цели команды, заголовки пакетов подписываются, но содержимое не шифруется
PktPrivacyСекретность пакетаПроверка подлинности и целостности всех пакетов к компьютеру-цели команды, заголовки и содержимое пакетов подписываются и шифруются

Wmi протокол что это. Administration%20via%20WMI%20 %20wmimgmt. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmimgmt. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmimgmt

Wmi протокол что это. Administration%20via%20WMI%20 %20winmgmt. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20winmgmt. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20winmgmt

Wmi протокол что это. Administration%20via%20WMI%20 %20wbemtest. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wbemtest. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wbemtest

Wmi протокол что это. Administration%20via%20WMI%20 %20wmic. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmic. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmic

Wmi протокол что это. Administration%20via%20WMI%20 %20mofcomp. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20mofcomp. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20mofcomp

Запросы WQL обычно применяются в скриптах, но их также можно протестировать в программе Wbemtest и в консольной утилите Wmic (утилита wmic не требует написания ключевого слова SELECT и полей выборки)

Общий синтаксис запроса WQL выглядит так:

В скриптах для подключения к WMI используются два метода: с использованием локатора (SWbemLocator) и с использованием моникера (WinMgmts). Метод локатора позволяет установить соединие с пространством имен от имени определенной учетной записи. Метод моникера разрешает подключаться к WMI только от имени текущей учетной записи.

Использование этого метода необходимо, когда в сценарии нужно явно задать имя и пароль учетной записи для подключения к WMI. Объект SWbemLocator создается так:

Подключение к репозиторию WMI производится с помощью метода ConnectServer:

Безопасность объекта указывается с помощью свойства Security_, в котором указывается уровень олицетворения и привилегии.

Пример использования локатора:

Пример использования моникера:

Метод Get используется для возвращения определения класса или экземпляра управляемого ресурса:

Пример использования метода Get:

Метод ExecQuery используется для выполнения запросов на языке WQL:

Пример использования метода ExecQuery:

Метод ExecMethod используется для выполнения метода указанного объекта:

Пример использования метода ExecMethod:

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

Аналогично синхронным методам WMI позволяет выполнять команды асинхронно, то есть не дожидаться результатов выполнения очередного запроса и продолжать работу сценария или программы. Названия таких асинхронных методов имеют окончание «Async», а работа с ними почти не отличается от обычных методов, но должны быть использованы два обязательных параметра: ссылка на специальный объект «слив событий» и контекстная информация объекта.

Пример использования асинхронного метода:

Рассмотренные выше методы возвращают объекты и коллекции объектов, которые обладают своими методами и свойствами. Информацию о всех свойствах и методах, поддерживаемых конкретным объектом, можно получить с помощью такого скрипта:

Пример использование класса CIM_DataFile для переименования файлов:

Аналогично приведенному примеру можно совершать и другие действия с файлами, так как класс CIM_DataFile поддерживает методы: копирование, удаление, переименование, NTFS-сжатие, смена разрешений, смена владельца.

Пример использования классов оборудования компьютера для получения информации о количестве портов USB 2.0 и используемых USB-устройствах:

Пример использования класса свойств принтеров для получения информации о настройках принтеров:

Ресурсы WMI доступны не только через скрипты, к ним можно обращаться из других языков программирования и даже из программ.

Существует два способа обращения к WMI через Visual Basic.NET.

Первый способ берет свое начало из скриптов VBS. Он использует обращение к инстументу winmgmts, как это делалось в методе моникера:

Пример запроса модели комьютера (консольное приложение)

Второй способ является более правильным с точки зрения Visual Studio. Он использует классSystem.Managementдля запросов к WMI, в котором указываются пространство WMI, параметры подключения и WQL запрос:

Использование полученных объектов аналогично использованию в скриптах.

Пример запроса сервисов локального комьютера (консольное приложение):

В качестве примера прораммы использования WMI в Visual Basic.Net представлено консольное приложение управления сервисом печати компьютера. Приложение запрашивает модель компьютера и выводит результат в консоль. После чего запрашивает состояние сервиса печати и, если он остановлен, предлагает запустить его.

Приложение разделено на две части: класс, который компилируется в динамическую библиотеку DLL, и программа, которая собирается в исполняемый файл EXE.

Листинг файла WMIClass.vb:

Листинг файла TestModule.vb:

Инструмент Scriptomatic предствляет из себя HTA-приложение, которое генерирует код, использующий WMI, на VBSScript, JScript, Perl и Python. Сам по себе WMI может оказаться трудным для изучения, поэтому рекомендуется использовать Scriptomatic для освоения классов WMI, а также для быстрого создания шаблонов обращения к ресерсум WMI. Scriptomatic позволяет выбрать интересующий объект WMI, а затем генерирует код на указанном языке программирования. Полученный код можно выполнить непосредственно в оболочке программы, а результаты вывести в консоль, текстовый файл, HTML, Excel или XML. Инструмент доступен на сайте Microsoft по этой ссылке.

Wmi протокол что это. Administration%20via%20WMI%20 %20wmiscriptomatic%20 %2001. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmiscriptomatic%20 %2001. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmiscriptomatic%20 %2001

Wmi протокол что это. Administration%20via%20WMI%20 %20wmiscriptomatic%20 %2002. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmiscriptomatic%20 %2002. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmiscriptomatic%20 %2002

Программа WMI Code Creator представляет из себя генератор кода, который использует WMI для получения информации и для осуществления задач упраления компьютерами. Программа может помочь научиться использовать WMI-скрипты и WMI-приложения для управления как локальным, так и удаленным компьютером. Инструмент доступен на сайте Microsoft по этой ссылке.

Используя WMI Code Creator можно найти любую информацию о компьютере: имя и версия операционной системы, свободное место на диске, состояние сервисов и так далее. Можно выполнить метод из WMI класса для осуществления управления компьютером: создать или удалить сервис, запустить или закрыть программы, назначить разрешения на папку или файл и многое другое. Этот инструмент так же позволяет просматривать доступное WMI-пространство и WMI-классы, чтобы найти нужную для программирования инстанцию с ее описанием, свойствами, методами и примером использования.

Wmi протокол что это. Administration%20via%20WMI%20 %20wmicodecreator%20 %2001. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmicodecreator%20 %2001. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmicodecreator%20 %2001

Wmi протокол что это. Administration%20via%20WMI%20 %20wmicodecreator%20 %2002. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmicodecreator%20 %2002. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmicodecreator%20 %2002

Wmi протокол что это. Administration%20via%20WMI%20 %20wmicodecreator%20 %2003. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmicodecreator%20 %2003. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmicodecreator%20 %2003

Wmi протокол что это. Administration%20via%20WMI%20 %20wmicodecreator%20 %2004. Wmi протокол что это фото. Wmi протокол что это-Administration%20via%20WMI%20 %20wmicodecreator%20 %2004. картинка Wmi протокол что это. картинка Administration%20via%20WMI%20 %20wmicodecreator%20 %2004

Помимо скриптов WMI может применяться и в полноценных программах, то есть программисты могут внедрять запросы к WMI в исполняемый код, завязывая свою программу с работой WMI, благодаря чему программа становится проще и легче, но зависимой от правильности работы Windows Management Instrumentation.

Источник

Глава 7. Использование инструментария WMI

Инструментарий WMI и CIM

По умолчанию PowerShell поставляется с командлетами для использования вместе с другими технологиями, такими как инструментарий управления Windows (WMI). Существует несколько собственных командлетов WMI, которые используются в PowerShell без необходимости установки дополнительного программного обеспечения или модулей.

PowerShell поставляется с командлетами для работы с инструментарием WMI с момента выпуска. Get-Command можно использовать для определения командлетов WMI, существующих в PowerShell. Приведенные ниже результаты получены на моем компьютере с Windows 10 в лабораторной среде под управлением PowerShell версии 5.1. Ваши результаты могут отличаться в зависимости от используемой версии PowerShell.

Командлеты модели CIM появились в PowerShell версии 3.0. Командлеты CIM разработаны так, чтобы их можно было использовать на компьютерах под управлением Windows и других ОС. Командлеты WMI являются устаревшими, поэтому вместо них рекомендуется использовать командлеты CIM.

Все командлеты CIM содержатся в модуле. Чтобы получить список командлетов CIM, используйте Get-Command вместе с параметром Module, как показано в следующем примере.

Как и раньше, командлеты CIM позволяют вам работать с WMI, поэтому не путайтесь, если кто-то пытается выполнить запрос WMI с помощью командлетов CIM PowerShell.

Как я уже говорил, WMI — это отдельная технология в PowerShell, поэтому вы просто используете командлеты CIM для доступа к WMI. Вы можете найти прежний сценарий VBScript, в котором используется язык запросов WMI (WQL), позволяющий выполнить запрос WMI, как показано в следующем примере.

Вы можете взять WQL-запрос из сценария VBScript и использовать его с командлетом Get-CimInstance без изменений.

Это не тот способ, который я стандартно использую для запроса WMI с помощью PowerShell. Но он действительно работает, позволяя легко перенести существующие сценарии VBScript в PowerShell. При внесении скрипта из одной строки для запроса WMI я использую следующий синтаксис.

Если нужно указать только серийный номер, я могу передать выходные данные в Select-Object и указать только свойство SerialNumber.

По умолчанию существуют несколько свойств, извлекающихся в фоновом режиме, который никогда не используется. Это действие не важно, если запрос инструментария WMI выполняется на локальном компьютере. Но когда вы приступаете к выполнению запросов с удаленных компьютеров, оно позволяет не только увеличить время обработки для возврата информации, но и получить по сети дополнительные ненужные данные. Get-CimInstance содержит параметр Property, который ограничивает извлекаемые данные. Это действие позволяет выполнять запрос к инструментарию WMI более эффективно.

Предыдущие результаты вернули объект. Для возврата простой строки используйте параметр ExpandProperty.

Запрос с удаленных компьютеров с помощью командлетов CIM

Я использую PowerShell от имени локального администратора, который является пользователем домена. При попытке запросить данные с удаленного компьютера с помощью командлета Get-CimInstance появляется сообщение об ошибке с отказом в доступе.

Когда речь идет о PowerShell, многие люди сталкиваются с проблемами безопасности, но дело в том, что вы имеете точно такие же разрешения в PowerShell, как и в графическом интерфейсе пользователя. Ни больше ни меньше. Из предыдущего примера видно, что пользователь, запускающий PowerShell, не имеет прав на выполнение запроса WMI с сервера DC01. Я могу повторно запустить PowerShell от имени администратора домена, так как Get-CimInstance не содержит параметр Credential. Но это не совсем удобно, так как потом любая открытая в PowerShell программа будет запускаться с правами администратора домена. С точки зрения безопасности это действие может быть рискованным в зависимости от ситуации.

Используя принцип предоставления наименьших прав, я буду повышать уровень прав учетной записи администратора домена для каждой команды с помощью параметра Credential, если команда будет содержать такой же параметр. Get-CimInstance не содержит параметр Credential, поэтому решение для этого сценария заключается в том, чтобы сначала создать параметр CimSession. Затем я использую параметр CimSession для запроса WMI на удаленном компьютере вместо имени компьютера.

Сеанс CIM, созданный в предыдущем примере, теперь можно использовать с командлетом Get-CimInstance для запроса информации BIOS из инструментария WMI на удаленном компьютере.

Использование сеансов CIM вместо ввода имени компьютера дает несколько дополнительных преимуществ. При выполнении нескольких запросов к одному и тому же компьютеру использовать сеанс CIM более эффективно, чем вводить имя компьютера для каждого запроса. При создании сеанса CIM соединение настраивается только один раз. Затем несколько запросов используют этот же сеанс для получения информации. При использовании имени компьютера необходимы командлеты для установки и разрыва соединения с каждым отдельным запросом.

Создайте параметр протокола DCOM с помощью командлета New-CimSessionOption и сохраните его в переменной.

Для удобства вы можете сохранить в переменной свои учетные данные администратора домена или учетные данные с повышенными правами, чтобы постоянно не вводить их для каждой команды.

Я использую сервер SQL03 по управлением Windows Server 2008 (без R2). Это новейшая операционная система Windows Server, на которой средство PowerShell по умолчанию не установлено.

Создайте параметр CimSession на сервере SQL03, используя протокол DCOM.

Выходные данные запроса одинаковые, независимо от используемого базового протокола.

Командлет Get-CimSession используется для просмотра подключенных в данный момент параметров CimSession, а также используемых ими протоколов.

Отправьте запрос с обоих компьютеров с помощью одной команды, при этом на первом должен использоваться протокол WSMan, а на втором — DCOM.

Я написал несколько статей в блогах о командлетах WMI и CIM. В одной из самых полезных статей описывается созданная мной функция, которая позволяет автоматически определить нужный протокол WSMan или DCOM, а также настроить сеанс CIM, не указывая протокол вручную. Эта статья называется PowerShell Function to Create CimSessions to Remote Computers with Fallback to Dcom (Использование функции PowerShell для создания параметров CimSession на удаленных компьютерах с помощью отката и DCOM).

Сводка

В этой главе вы узнали об использовании PowerShell для работы с инструментарием WMI на локальном и на удаленном компьютерах. Кроме того, вы узнали о том, как использовать командлеты CIM для работы с удаленными компьютерами с помощью протокола WSMan или DCOM.

Источник

Wmi протокол что это

Хороший материал, взятый из журнала samag.ru [14], автор Константин Леонтьев. Тем, кто его до сих пор не читает, читать немедленно.

[Вы всё ещё не используете WMI?]

Если ты один из большинства админов, ты частенько грустишь, выглядывая из окна и наблюдая, как некоторые твои собратья ездят на своих «Ягуарах» и «Порше», или готовятся дернуть в Монте-Карло или какое-нибудь другое экзотическое место. И, конечно же, ты говоришь себе: «Я знаю о системном администрировании столько же, сколько и они, но почему именно у них есть клёвые тачки, яхты и часы «Ролекс». «. Что ж, мы здесь для того, чтобы приоткрыть тебе небольшой секрет. Это все потому, что они знают, как писать WMI-скрипты, а ты – нет!

Microsoft TechNet: Bob Wells, Dean Tsaltas, Ethan Wilansky и Greg Stemp

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

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

Вы получите практический навык работы со всеми основными средствами WMI, выполнив несколько простых, но весьма полезных упражнений. Я предполагаю, что вы немного знакомы с программированием на VBScript и с азами языка SQL, а также имеете общее представление об объектно-ориентированном программировании. Обратите внимание на готовые примеры кода, которые помогут вам в Вашей работе.

Что такое WMI?

Формально: аббревиатура WMI – это Windows Management Instrumentation (инструментарий управления Windows). Из названия понятно, для чего создана и применяется эта технология. Стоит лишь добавить, что она давно перешагнула рамки управления только операционной системой Windows и позволяет контролировать множество других совместимых с ней приложений.

По своей сути WMI – это расширенная и адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise Management компании DMTF Inc [1]). В основе WBEM лежит идея создания универсального интерфейса мониторинга и управления к различным системам и компонентам распределенной информационной среды предприятия с использованием объектно-ориентированной идеологии и широко распространенных веб-технологий представления информации: протоколов XML и HTTP. Стандарт WBEM является правопреемником стандарта DMI (Desktop Management Interface).

В основе структуры представления данных в стандарте WBEM лежит CIM (Common Information Model – модель информации общего типа), реализующая объектно-ориентированный подход к представлению компонентов систем как классов со своим набором свойств и методов, а также принципов наследования.

Основное средство для описания новых элементов модели CIM – это синтаксис языка Managed Object Format (MOF), который является текстовым и легко понятным человеку. Таким образом, любое приложение или драйвер в операционной системе, которая поддерживает стандарт WBEM, может добавить к системной модели CIM свой набор классов. Такое расширение модели CIM позволяет легко интегрировать в единую систему мониторинга и управления все новые и новые приложения. Для этой интеграции приложение должно лишь зарегистрировать свои классы в существующей модели CIM и обеспечить стандартные вызовы встроенных процедур для создания объектов этих классов и наполнения их свойствами и методами. Набор этих процедур оформляется, как WMI Provider – специальная библиотека, являющаяся мостом между любым приложением и ядром службы WMI.

Таким образом, WMI – это открытая унифицированная библиотека (репозиторий) однотипных интерфейсов доступа к параметрам, настройки и свойствам различных систем и их компонентов. Архитектура WMI представлена на рис. 1.

Wmi протокол что это. WMI architecture. Wmi протокол что это фото. Wmi протокол что это-WMI architecture. картинка Wmi протокол что это. картинка WMI architecture

Рисунок 1. Архитектура WMI

Многие производители программного и аппаратного обеспечения ведут разработку ПО в соответствии со стандартом WBEM. Как следствие, это ПО совместимо и с WMI, а значит, может управляться через единый и удобный интерфейс.

Классы, объекты, свойства и методы

Поскольку WMI построена по объектно-ориентированному принципу, то все данные об операционной системе, ее свойствах, управляемых приложениях и обнаруженном оборудовании представлены в виде объектов. Каждый тип объекта описан классом, в состав которого входят свойства и методы. Определения классов описаны в MOF-файлах, а объекты этих классов с заполненными свойствами и доступными методами при их вызове возвращаются WMI-провайдерами. Управляет созданием и удалением объектов, а также вызовом их методов служба CIM Object Manager.

Получается, что если мы хотим управлять настройками сетевого адаптера, то мы должны запросить у CIM Object Manager экземпляр объекта нужного нам сетевого адаптера (забегая вперед, скажу, что этот объект принадлежит классу Win32_NetworkAdapterConfiguration) и вызвать нужные нам методы. В частности, для того чтобы обновить аренду адреса на DHCP сервере, достаточно вызвать метод RenewDHCPLease экземпляра объекта Win32_NetworkAdapterConfiguration.

Обзор средств работы с WMI для администратора

Начнем фактическое знакомство с WMI с обзора утилит, которые позволяют вам работать с WMI на ОС семейства Windows. Условно разделим этот набор утилит на поставляемые с операционной системой по умолчанию и набор утилит, которые потребуется скачивать с сайта компании Microsoft. К первой категории относятся следующие утилиты:

wmimgmt.msc – оснастка консоли MMC, позволяющая в целом управлять самой системой WMI на выбранном компьютере.
Winmgmt.exe – консольная утилита управления WMI. Выполняет аналогичные действия, что и консоль MMC wmimgmt.msc. Кроме того, является исполняемым файлом сервиса WMI в системе. Для запуска из консоли используется с опцией /exe (winmgmt.exe /exe).
Wbemtest.exe – графическая утилита для интерактивной работы с WMI. Удобна для тестирования классов и методов, просмотра свойств и т. п.
Wmic.exe – консольная утилита для вызова объектов и методов WMI (WMI Console) – присутствует только в Windows XP и Windows Server 2003.
mofcomp.exe – компилятор MOF-файлов. Служит для расширения репозитория WMI и тонких операций с библиотекой классов WMI, а также для «ремонта» нарушенного репозитория.

Ко второй категории средств для работы с WMI, которые требуется дополнительно устанавливать, относится:

Все утилиты, относящиеся ко второй категории, можно бесплатно скачать с сайта компании Microsoft по ссылкам, перечисленным в конце статьи. Полезно будет так же посетить раздел загрузки средств работы со скриптами [6] и общий раздел загрузки средств работы с WMI [7].

Для того, чтобы рассмотреть возможности и особенности всех средств работы с WMI, которые перечислены выше, не хватит и целого журнала, поэтому мы кратко остановимся на некоторых из них, на мой взгляд, наиболее полезных и (или) наиболее употребимых. Собственно, к таким я отношу следующие утилиты: WBEMTEST, WMIC, WMI Administrative Tools и довольно новую, но весьма полезную и удачную утилиту WMI Code Creator 1.0.

Надо отметить, что существуют и другие утилиты и средства работы с WMI, в том числе разработанные не компанией Microsoft, однако формат статьи не позволяет нам на них останавливаться сколько-нибудь подробно. Об одном из этих средств я считаю своим долгом хотя бы упомянуть в этой статье – это ADSI Scriptomatic [8], позволяющее создавать скрипты для управления службой каталогов Microsoft Active Directory.

Все примеры в этой статье протестированы на операционной системе Windows XP Service Pack 2, однако должны также корректно работать и на более ранних версиях OS Windows вплоть до Windows 2000. Если вам потребуется использовать WMI на более ранних версиях ОС Windows, то вам необходимо будет установить WMI Core Components 1.5 [9] и последнюю версию Windows Scripting Host [10, 11] на эти ОС.

Знакомимся с утилитой WBEMTEST

Чтобы прямо сейчас посмотреть, какой набор классов определен в репозитории WMI на вашем персональном компьютере, достаточно запустить утилиту wbemtest.exe и установить флажок «Enable All Privileges», как показано на рис. 2.

Wmi протокол что это. WMI WBEMTEST pic02 main window. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic02 main window. картинка Wmi протокол что это. картинка WMI WBEMTEST pic02 main window

Рисунок 2. Основное окно утилиты WBEMTEST

Далее нужно нажать кнопку «Connect…», в поле пространства имен вписать root\CIMv2, как это показано на рис. 3, и нажать кнопку «Connect».

Wmi протокол что это. WMI WBEMTEST pic03. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic03. картинка Wmi протокол что это. картинка WMI WBEMTEST pic03

Рисунок 3. Окно настройки подключения к репозиторию WMI утилиты WBEMTEST

Wmi протокол что это. WMI WBEMTEST pic04. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic04. картинка Wmi протокол что это. картинка WMI WBEMTEST pic04

Рисунок 4. Основное окно утилиты WBEMTEST после подключения к репозиторию WMI

Затем нажмите кнопку «Enum Classes…», выберите «Recursive», не заполняйте поле суперкласса и нажмите «Ok». В результате вы получите список классов, определенный в вашем репозитории WMI, в пространстве имен CIMv2. Найдите среди всех класс с названием Win32_OperatingSystem (CIM_OperatingSystem), как это показано на рис. 5.

Wmi протокол что это. WMI WBEMTEST pic05. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic05. картинка Wmi протокол что это. картинка WMI WBEMTEST pic05

Рисунок 5. Окно результатов запроса со списком всех классов WMI пространства имен CIMv2

Дважды щелкните курсором мыши по классу Win32_OperatingSystem, посмотрите его свойства. Пример того, как это выглядит, показан на рис. 6.

Wmi протокол что это. WMI WBEMTEST pic06. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic06. картинка Wmi протокол что это. картинка WMI WBEMTEST pic06

Рисунок 6. Окно свойств класса Win32_OperatingSystem

Далее нужно нажать кнопку «Instances» и в открывшемся окне дважды щелкнуть курсором мыши по строке в списке экземпляров операционных систем. В открывшемся окне свойств экземпляра операционной системы найдите свойство («Property») с названием «Name», как это показано на рис. 7.

Wmi протокол что это. WMI WBEMTEST pic07. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic07. картинка Wmi протокол что это. картинка WMI WBEMTEST pic07

Рисунок 7. Окно свойств экземпляра объекта класса Win32_OperatingSystem

Дважды кликните по свойству курсором мыши. В открывшемся окне редактора свойств, которое показано на рис. 8, скопируйте отображаемое значение в буфер обмена. Оно пригодится нам в дальнейшем.

Wmi протокол что это. WMI WBEMTEST pic08. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic08. картинка Wmi протокол что это. картинка WMI WBEMTEST pic08

Рисунок 8. Окно со значением свойства Name экземпляра объекта класса Win32_OperatingSystem

Далее закройте все окна, кроме основного окна программы wbemtest. В блокноте отредактируйте строку из буфера обмена следующем образом:

— Заключите строку в кавычки.
— До первых кавычек добавьте следующий текст: «Win32_Operating-System.Name=».
— Замените все одинарные обратные слеши на двойные.

В итоге у вас должна получиться примерно следующая строка (в зависимости от версии ОС и логического диска, куда она установлена):

Win32_OperatingSystem.Name=»Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1″

Теперь давайте выполним следующее упражнение с утилитой wbemtest. В уже открытом окне утилиты wbemtest нажмем кнопку «Execute Method…» и в окошко «GetObjectPath» вставим строку, которую мы подготовили в блокноте. В появившемся окне (см. рис. 9) вызова метода экземпляра объекта выберите метод Reboot и нажмите кнопку «Execute!».

Wmi протокол что это. WMI WBEMTEST pic09. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic09. картинка Wmi протокол что это. картинка WMI WBEMTEST pic09

Рисунок 9. Окно вызова метода для экземпляра объекта класса Win32_OperatingSystem утилиты WBEMTEST

Поздравляю, Вы только что отправили свою операционную систему в перезагрузку, используя WMI. Если вы вдруг получили вместо перезагрузки сообщение об ошибке 0x80041062 «Privilege not held», то это означает, что вы забыли установить опцию «Enable All Privileges» до подключения к репозиторию WMI.

Теперь следует сказать (пока Windows перезагружается), что при подключении к пространству имен WMI вы можете подключаться не только на локальной машине, но и как следует из обзора WMI к любой удаленной. Главное, обладать на той машине необходимыми правами. Но об этих правах позднее! Для подключения к удаленной машине в окне подключения достаточно в поле Name Space указать строку вида \\\root\CIMv2 и указать учетные данные пользователя, обладающего необходимыми правами (например, Administrator). Пример этого показан на рис. 10.

Wmi протокол что это. WMI WBEMTEST pic10. Wmi протокол что это фото. Wmi протокол что это-WMI WBEMTEST pic10. картинка Wmi протокол что это. картинка WMI WBEMTEST pic10

Рисунок 10. Окно подключение к пространству имен WMI с явным указанием имени сервера

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

Утилита WMIC

Чтобы воспользоваться этой очень важной и полезной для администратора утилитой, достаточно запустить интерпретатор командной строки cmd.exe и в строке приглашения набрать WMIC. После этого у вас появится приглашение консоли WMI, как это показано на рис. 11.

Wmi протокол что это. WMI WMIC. Wmi протокол что это фото. Wmi протокол что это-WMI WMIC. картинка Wmi протокол что это. картинка WMI WMIC

Рисунок 11. Командное окно с запущенной утилитой WMIC в интерактивном режиме

Для получения справки по всем командам, доступным из консоли WMIC, достаточно в строке приглашения ввести команду «/?». Синтаксис каждой команды или глобальной опции вы можете посмотреть, введя ее название и знак вопроса. Например:

Так мы работаем с утилитой WMIC в интерактивном режиме. Однако ничто не мешает нам использовать ее и в пакетном режиме из наших BAT/CMD-сценариев. Например, в приглашении командной строки CMD можно написать:

и получить тот же результат.

Утилита WMIC создана для удобства использования WMI прямо из командной строки, поэтому наиболее употребимые классы WMI доступны для использования под псевдонимами (ALIAS). Вы можете самостоятельно определить псевдонимы для тех классов, для которых это еще не сделано, или добавить новые псевдонимы для тех классов WMI, которые уже их имеют.

Список псевдонимов, которые определены на Windows XP Service Pack 2 по умолчанию с их кратким описанием, приведены в таблице 1.

Таблица 1. Список псевдонимов утилиты WMIC и соответствие их классам WMI

ПсевдонимОписаниеИмя класса WMI
BASEBOARDУправление материнской платой, она также называется motherboard, или системная плата.Win32_BIOS
BIOSУправления базовыми сервисами ввода/вывода (Basic input/output services, BIOS).Win32_BaseBoard
BOOTCONFIGУправление конфигурацией загрузки (Boot configuration management).Win32_BootConfiguration
CDROMУправление приводом CD-ROM.Win32_CDROMDrive
COMPUTERSYSTEMУправление системой компьютера.Win32_ComputerSystem
CPUУправление процессовром.WIN32_PROCESSOR
CSPRODUCTПолучение от SMBIOS информации о компьютере как системном продукте.Win32_ComputerSystemProduct
DATAFILEУправление данными файлов (DataFile Management).CIM_DataFile
DCOMAPPУправление приложениями (DCOM Application management).WIN32_DCOMApplication
DESKTOPУправление рабочим столом пользователя (User’s Desktop management).WIN32_DESKTOP
DESKTOPMONITORDesktop Monitor managementWIN32_DESKTOPMONITOR
DEVICEMEMORYADDRESSУправление адресами памяти устройств (Device memory addresses management).Win32_DeviceMemoryAddress
DISKDRIVEУправление диском на физическом уровне (Physical disk drive management).Win32_DiskDrive
DISKQUOTAУправление квотами NTFS пространства диска (Disk space usage for NTFS volumes).Win32_DiskQuota
DMACHANNELУправление каналами прямого доступа к памяти (Direct memory access, DMA channel management).Win32_DMAChannel
ENVIRONMENTУправление настройками системного окружения (System environment settings management)Win32_Environment
FSDIRУправление директориями файловой системы (Filesystem directory entry management).Win32_Directory
GROUPУправление группами учетных записей (Group account management).Win32_Group
IDECONTROLLERУправление контролером диска IDE (IDE Controller management).Win32_IDEController
IRQУправление сигналами прерываний (Interrupt request line, IRQ management).Win32_IRQResource
JOBПредоставляет доступ к назначенным заданиям (jobs scheduled) с использованием службы назначенных заданий (schedule service).Win32_ScheduledJob
LOADORDERУправление службами системы, которые задают зависимости запуска (execution dependencies).Win32_LoadOrderGroup
LOGICALDISKУправление дисковыми локальными устройствами хранения (Local storage device management).Win32_LogicalDisk
LOGONУправление сессиями пользователей (LOGON Sessions).Win32_LogonSession
MEMCACHEУправление кэшем (Cache memory management).WIN32_CACHEMEMORY
MEMLOGICALУправление памятью системы (как сконфигурирована карта памяти, и как память доступна для приложений и сервисов).Win32_LogicalMemoryConfiguration
MEMPHYSICALУправление памятью компьютера на физическом уровне (Computer system’s physical memory management).Win32_PhysicalMemoryArray
NETCLIENTУправление клиентом сети (Network Client management).WIN32_NetworkClient
NETLOGINУправление информацией учетной записи сети для отдельного пользователя.Win32_NetworkLoginProfile
NETPROTOCOLУправление протоколами и их сетевыми характеристиками.Win32_NetworkProtocol
NETUSEУправление активным сетевым соединением.Win32_NetworkConnection
NICУправление сетевым адаптером (Network Interface Controller, NIC).Win32_NetworkAdapter
NICCONFIGУправление конфигурацией сетевого адаптера.Win32_NetworkAdapterConfiguration
NTDOMAINУправление доменом NT.Win32_NTDomain
NTEVENTПолучение доступа к логам событий (Entries in the NT Event Log).Win32_NTLogEvent
NTEVENTLOGУправление файлом лога (NT eventlog file management).Win32_NTEventlogFile
ONBOARDDEVICEУправление общими адаптерами, установленными в материнскую плату (system board).Win32_OnBoardDevice
OSУправление инсталлированными операционными системами.Win32_OperatingSystem
PAGEFILEУправление виртуальной памятью и её свопом на диск.Win32_PageFileUsage
PAGEFILESETУстановка параметров файла свопа.Win32_PageFileSetting
PARTITIONУправление логическими разделами физического диска (Management of partitioned areas of a physical disk).Win32_DiskPartition
PORTУправление портами ввода/вывода (I/O port management).Win32_PortResource
PORTCONNECTORУправление физическим соединением портов (Physical connection ports management).Win32_PortConnector
PRINTERPrinter device managementWin32_Printer
PRINTERCONFIGУправление конфигурацией принтера.Win32_PrinterConfiguration
PRINTJOBУправление заданиями принтера.Win32_PrintJob
PROCESSУправление процессами.Win32_Process
PRODUCTУправление задачей инсталляционных пакетов (Installation package task management).Win32_Product
QFEБыстрое исправление ошибок (Quick Fix Engineering).Win32_QuickFixEngineering
QUOTASETTINGУстановка информации о квотах, установленных для тома диска (Setting information for disk quotas on a volume).Win32_QuotaSetting
RECOVEROSИнформация, которая была захвачена из памяти при крахе системы.Win32_OSRecoveryConfiguration
REGISTRYУправление реестром системы.Win32_Registry
SCSICONTROLLERУправление контроллером SCSI.Win32_SCSIController
SERVERУправление информацией о сервере.Win32_PerfRawData_PerfNet_Server
SERVICEУправление прикладными сервисами.Win32_Service
SHAREУправление общими сетевыми ресурсами (Shared resource management).Win32_Share
SOFTWAREELEMENTУправление элементами программных продуктов, установленных в системе.Win32_SoftwareElement
SOFTWAREFEATUREУправление подмножествами программных продуктов SoftwareElement.Win32_SoftwareFeature
SOUNDDEVУправление устройством звука.WIN32_SoundDevice
STARTUPУправление командами автозапуска при входе пользователя в систему.Win32_StartupCommand
SYSACCOUNTУправление учетной записью системы (System account management).Win32_SystemAccount
SYSDRIVERУправление системным драйвером для базовой службы (Management of the system driver for a base service).Win32_SystemDriver
SYSTEMENCLOSUREУправление физическим доступом к корпусу компьютера (Physical system enclosure management).Win32_SystemEnclosure
SYSTEMSLOTУправление физичесими соединениями, включая порты, слоты и периферийные устройства, и точками проприетарных соединений.Win32_SystemSlot
TAPEDRIVEУправление накопителем на магнитной ленте.Win32_TapeDrive
TEMPERATUREУправление данными от датчика температуры (электронный термометр).Win32_TemperatureProbe
TIMEZONEУправление данными часового пояса (Time zone data management).Win32_TimeZone
UPSУправление источником бесперебойного питания (Uninterruptible power supply, UPS).Win32_UninterruptiblePowerSupply
USERACCOUNTУправление учетными записями пользователей (User account management).Win32_UserAccount
VOLTAGEУправление данными сенсора напряжения (электронный вольтметр).Win32_VoltageProbe
VOLUMEQUOTASETTINGСвязывает установки дисковой квоты с определенным дисковым томом.Win32_VolumeQuotaSetting
WMISETУправляет рабочими параметрами службы WMI.Win32_WMISetting

Теперь давайте попробуем использовать утилиту WMIC для работы с WMI из командной строки. Для начала выйдите из интерактивного режима консоли WMIC командой exit. Вы оказались в среде командного интерпретатора CMD. В приглашении наберите команду:

Вы получите список процессов, запущенных на вашем локальном компьютере. Теперь выполните команду:

Теперь список процессов ограничен только теми процессами, в имени исполняемого модуля которых присутствует строка «cmd.exe». Обратите внимание на PID процесса(ов).

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

Сравните полученные результаты. Запомните PID процесса CMD.EXE.

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

Среди них обратите внимание на метод Terminate – он принимает в качестве единственного входного параметра значение типа UINT32 (беззнаковое 32-разрядное целое) в качестве индекса причины завершения процесса. В данном случае этот параметр аналогичен Exit-коду.

Запустите четыре разных экземпляра процесса cmd.exe (откройте 4 командных окна). Еще раз выполните команду:

В результате вы получите в ответ примерно следующее:

HandleCount Name Priority ProcessId ThreadCount WorkingSetSize
28 cmd.exe 8 4648 1 2494464
28 cmd.exe 8 5156 1 2498560
28 cmd.exe 8 4940 1 2498560
31 cmd.exe 8 612 1 2703360

Итак, чтобы завершить конкретный процесс, просто наберите:

вместо звездочек укажите PID нужного вам экземпляра процесса cmd.exe.

Теперь давайте одной командой завершим все оставшиеся процессы cmd.exe, для этого просто введите команду:

Что за конструкция where и как еще ее можно использовать, мы разберем чуть позже в разделе «Язык запросов WQL».

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

Если же вы хотите выполнить какие-то действия, используя WMI не с одним, а с целой группой компьютеров, то достаточно написать команду с использованием WMIC и ключом «/node:@serverslist.txt»:

В файле serverlist.txt в столбец или в строку должны быть перечислены имена (IP-адреса) хостов, на которых необходимо выполнить это действие.

В довершение краткого описания утилиты WMIC, следует сказать об еще одной, поистине замечательной, ее особенности – форматировании вывода. Практически все команды WMIC, которые возвращают информацию, могут ее форматировать разными способами. Для этого используется ключ «/format:». Форматирование производится с использованием технологии XSLT (шаблонов для преобразования XML). По умолчанию уже определен ряд готовых преобразований: CSV, HFORM, HMOF, HTABLE, HXML, RAWXML, TABLE, VALUE. Вы так же сами можете определить дополнительные шаблоны форматирования в формате XSLT и использовать их совместно с WMIC.

Краткое практическое знакомство c WMI CIM Studio

Это набор приложений Microsoft Internet Explorer, который позволяет с одной стороны очень тонко, с другой стороны довольно удобно работать с WMI. При этом вы можете как просматривать классы и вызывать методы, так и создавать события и даже модифицировать репозиторий WMI. Поэтому будьте очень осторожны. Если вы запускаете WMI CIM Studio на Windows XP Service Pack 2, то Internet Explorer предупредит вас о потенциальной угрозе безопасности. Вам следует разрешить заблокированное содержимое ActiveX.

На рис. 12 показан вид окна WMI CIM Studio. Слева вы видите набор классов WMI и их иерархии в том пространстве имен WMI, которое вы выбрали при подключении. Справа перечислены все свойства выбранного класса. Все методы класса перечислены на закладке Methods, а на закладке Associations показана «родословная» этого класса и других классов, которые выведены из него.

Wmi протокол что это. WMI CIM Studio. Wmi протокол что это фото. Wmi протокол что это-WMI CIM Studio. картинка Wmi протокол что это. картинка WMI CIM Studio

Рисунок 12. Окно утилиты WMI CIM Studio с открытыми свойствами класса Win32_OperatingSystem

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

WMI CIM Studio очень удобный инструмент для поиска классов и свойств в огромном море репозитория WMI. Для поиска нажмите кнопку со значком бинокля и введите шаблон для поиска, например «network». Выберите область поиска (Class names, Class description, Property names) и нажмите «Go!». В целом WMI CIM Studio очень хороший инструмент для поиска и исследования репозитория WMI и для интерактивного анализа состояния экземпляров объектов WMI.

Язык запросов WQL

Теперь нам следует разобраться, что же такое WQL, а также каким образом в разделе, где описана работа WMIC, мы делали выборку объектов WMI по определенным критериям. Разбирая эту тему, полезно вспомнить, что объектно-ориентированная модель представления данных хорошо ложится на структуру реляционных баз данных. В частности можно провести следующие аналогии: определение таблицы данных (поля и их типы) – это классы объектов, строки в конкретной таблице – это экземпляры объектов данного класса. Каждое поле (столбец) в таблице – это свойство всех объектов данного класса. Каждая ячейка в конкретной строке – это свойство (property) конкретного экземпляра объекта. Связи таблиц и представления можно рассматривать как частный случай наследования. Триггеры и встроенные процедуры исходя из этой аналогии – это методы классов.

Собственно, для того чтобы удобно было работать с множественными экземплярами объектов WMI, используется язык WMI Query Language (WQL), который является подмножеством ANSI SQL.

Основное отличие WQL от ANSI SQL состоит в том, что WQL не позволяет производить изменения в данных WMI, т. е. фактически в WQL поддерживается лишь один оператор SQL: select. Кроме того, в операторе select языка WQL не поддерживаются следующие ключевые слова: DISTINCT, COUNT, JOIN, SUBSTRING, ORDER BY, UPPER, LOWER и DATEPART (эти ключевые слова поддерживаются в варианте Extended WQL (eWQL), реализованном в Microsoft SMS 2.0 и SMS 2003). Не поддерживаются арифметические операторы. Кроме того конструкции IS и IS NOT могут применяться только в сочетании с константой NULL. Языком WQL поддерживается оператор LIKE. Более подробно про шаблоны, применяемые совместно с оператором LIKE в WQL, можно ознакомиться в оригинальном описании WMI на сайте Microsoft [12, 13].

Ниже приведен пример некоторых типичных WQL-запросов:

Вы можете поупражняться в запросах WMI с помощью уже хорошо известной вам утилиты WBEMTEST, нажав кнопку «Query» в ее главном окне.

Теперь вспомните утилиту командной строки WMIC, функции которой мы разбирали немного выше. В ее синтаксисе также могут использоваться WQL-запросы для удобства работы с наборами объектов одного класса. Чтобы использовать уже имеющиеся и проверенные WQL-запросы (большинство из них удобнее всего проверять утилитой WBEMTEST), из командной строки достаточно отбросить у WQL-запроса первую часть: «select * from». Затем заменить имя класса на его алиас (псевдоним) из таблицы 1 и при необходимости добавить после запроса вызов метода, формат вывода списка или запрос свойства объекта. Примеры того, что при этом получается, я уже приводил выше.

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

Заключение

Во второй части статьи [15] обсудим написание сценариев с использованием WMI и WSH. Будут разобраны особенности использования WMI в скриптах, из тех, которые обычно вызывают наибольшие затруднения у людей, начинающих работать с этой технологией. К таким темам я отношу: построение moniker string, использование различных пространств имен WMI, связка WMI и COM, использование различных языков программирования вместе с WMI, имперсонация, аутентификация и привилегии. Наконец, наиболее интересные моменты, связанные с подключением к удаленным компьютерам и обработкой системных событий с помощью WMI. В заключении мы обсудим готовые продукты, использующие WMI и стратегию развития этой технологии, а так же ее применения в информационных системах предприятий.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *