Подключение к WMI с помощью VBScript

Скрипты WMI могут сжимать многие шаги, необходимые в программе C++. Они могут подключаться к WMI не только через объект SWbemLocator , но и через моникер "winmgmts:". Моникер — это короткое имя, которое находит пространство имен, класс или экземпляр в WMI. Имя "winmgmts:" — это моникер WMI, который сообщает узлу сценариев Windows использовать объекты WMI, подключается к пространству имен по умолчанию и получает объект SWbemServices . Другие сведения о подключении, такие как уровень олицетворения или определенный класс или экземпляр, отображаются в строке после имени моникера. Моникеры можно использовать в вызовах, которые создают или получают объекты WMI. Дополнительные сведения см. в разделе Создание строки моникера.

В следующей процедуре описывается подключение к WMI с помощью SWbemLocator.

Подключение к WMI с помощью SWbemLocator

  1. Получение объекта указателя с помощью вызова CreateObject.

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. Войдите в пространство имен с помощью вызова метода ConnectServer .

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    Если вы не укажете компьютер в вызове ConnectServer, WMI подключается к локальному компьютеру. Если пространство имен не указано, WMI подключается к пространству имен, указанному в разделе реестра.

    HKEY_LOCAL_MACHINE\ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ\Microsoft\WBEM\Сценариев\Пространство имен по умолчанию

    Пространство имен по умолчанию — \root\cimv2. Дополнительные сведения о пространствах имен см. в разделе Создание иерархий в WMI.

  3. Задайте уровень олицетворения с помощью вызова метода SWbemServices.Security_ .

    objService.Security_.ImpersonationLevel = 3 
    

    Дополнительные сведения см. в разделе Настройка уровня безопасности процесса по умолчанию с помощью VBScript.

  4. Реализуйте назначение скрипта.

    WMI предоставляет различные объекты скриптов, которые используются для доступа к данным в сети и управления ими. Дополнительные сведения см. в разделах Управление сведениями о классах и экземплярах и API скриптов для WMI.

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    objService.Security_.ImpersonationLevel = 3
    Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob")
    i=0
    For each Job in Jobs
        i = i+1   
        WScript.Echo Job.JobId & "  " & Job.Command & VBNewLine
    Next
    If i = 0 Then
        WScript.Echo "No Jobs Scheduled with the AT command were found"
    End If
    

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

Подключение к WMI и получение объекта с помощью моникера

  1. Вызовите GetObject с моникером во входном параметре.

    'the simple version
    Set MyObject = GetObject("winMgmts::Win32_scheduledJob")
    
    'Or the more complex version
    strComputer = "."
    Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
    

    Moiniker содержит ряд элементов, которые можно использовать для подключения к WMI:

    • "winmgmts:" указывает WSH использовать объекты API скриптов. В этом конкретном примере WSH будет знать, что он должен вернуть SWbemObject, описывающий первый Win32_scheduledJob в системе. Другими возможными объектами для возврата будут SWbemCollection или SWbemServices , в зависимости от того, что описывает моникер.

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

    • При необходимости можно определить путь к объекту WMI. Сюда входит локальный или удаленный компьютер, пространство имен, а также имя класса . Дополнительные сведения об использовании getObject VBScript в скриптах WMI см. в статье Создание экземпляра и получение экземпляра WMI.

  2. Вместо получения одного элемента или коллекции можно также выбрать получение объекта SWbemServices (как описано в предыдущем примере). После этого можно вызвать дополнительные запросы к возвращаемого объекту.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob")
    For Each objJob in colScheduledJobs
        Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine
    Next
    

    В предыдущем примере олицетворение или impersonationLevel=3 является уровнем безопасности процесса по умолчанию. В следующем примере нет необходимости указывать этот уровень безопасности процесса, если не нужно изменить уровень безопасности процесса для делегирования. Дополнительные сведения см. в разделе Настройка уровня безопасности процесса по умолчанию с помощью VBScript.

Создание скриптов в WMI