Поделиться через


Подключение к 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\SOFTWARE\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. К ним относятся локальный или удаленный компьютер, пространство имен, а также имя класса. Дополнительные сведения об использовании VBScript GetObject в скриптах 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
    

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

Скриптинг в WMI