Подключение к службе WMI
Для работы с WMI необходимо в первую очередь подключиться к этой службе. Это можно сделать двумя различными способами.- с использованием объекта SWbemLocator
- с помощью WMI-моникера (WMI moniker) "WinMgmts:"
получаем объект swbemLocator:
Dim oLocator
Set oLocator = CreateObject("wbemScripting.Swbemlocator")
У объекта SwbemLocator есть один метод - ConnectServer() он вызывается для подключения к службе WMI на локальном или удаленном компьютере.
strComputer = ".";
UserName = "";
Password = "";
SWBemlocator = new ActiveXObject("WbemScripting.SWbemLocator");
SwbemServices = SWBemlocator.ConnectServer(strComputer,
"root/CIMV2",UserName,Password);
Полученный объект SwbemServices можно использовать для выполнения запросов WQL, получения ссылок на объекты WMI и т. п.
Второй способ подключения к WMI, который несколько более распространен — использование моникера.
Моникер (moniker) — это специальная строка определённой структуры, которая определяет подключение.
Отличительный его признак - он всегда начинается с подстроки "winmgmts:". Все остальные параметры являются необязательными. Так что самый короткий моникер так и выглядит:
Set objWMIService = GetObject("winmgmts:")
Регистр написания winmgmts роли не играет. В moniker string можно использовать не только прямую наклонную черту, но и обратную. Запись получается более короткая, но, как мне кажется, более сложная для восприятия. Большинство примеров как здесь, так и на сайте Microsoft используют именно этот метод.
Два следующих параметра являются необязательными.
Первый параметр - уровень безопасности WMI соединения. Можно определить несколько различных уровней безопасности WMI-соединения.
Второй необязательный параметр - путь к объекту WMI. Он сам может состоять из нескольких частей:
- удаленный компьютер
- пространство имен WMI
- класс CIM (Common Information Model) в пространстве имен
- конкретный экземпляр класса CIM
Если целевое пространство имен опущено, то WMI обращается к принимаемому по умолчанию пространству имен, которое указано в подразделе
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace
При стандартной установке Windows по умолчанию назначено пространство имен root\cimv2. Изменить это значение можно на закладке Advanced оснастки WMI Control консоли Microsoft Management Console (MMC).
Пространства имен | Описание |
---|---|
Cimv2 | хранит классы Win32. |
Default | хранит системные классы. |
Security | хранит классы безопасности WMI. |
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
В приведенном примере strComputer - сетевое имя компьютера, в котором мы хотим получить доступ к объекту WMI.
В следующем примере подключение идет непосредственно к классу пространства имен.
Dim colItems
strComputer = "."
strNS = "Root\CIMV2" 'имя пространства имён
strClass = "Win32_NetworkAdapterConfiguration" 'имя класса
Set colItems = GetObject("winmgmts:\\" & _
strComputer & "\" & strNS & ":" & strClass)
Обратите внимание, что перед указанием класса стоит двоеточие (":").
И несколько замечаний:
- Подключаться к службе WMI на локальном компьютере можно только от имени и с полномочиями текущего пользователя. Подключение к локальному компьютеру от имени другого пользователя невозможно. Поэтому, если подключение к WMI идет на локальном компьютере, то имя и пароль лучше не указывать.
- Если необходимо указать имя пользователя и пароль, то WMI-моникер применять нельзя. Вместо него следует использовать объект SWbemLocator
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуетс¤ регистраци¤).