通过 VBScript 连接到 WMI

WMI 脚本可以紧缩 c + + 程序中所需的多个步骤。 它们不仅可以通过 SWbemLocator 对象连接到 WMI,还可以通过名字对象 "winmgmts:" 连接。 名字对象是一个在 WMI 中定位命名空间、类或实例的短名称。 名称 "winmgmts:" 是 wmi 名字对象,通知 Windows 脚本宿主使用 wmi 对象、连接到默认命名空间,并获取 SWbemServices对象。 其他连接信息,例如模拟级别或特定的类或实例,则会出现在字符串后面的字符串中。 可以在创建或获取 WMI 对象的调用中使用名字对象。 有关详细信息,请参阅 构造名字对象字符串

以下过程介绍如何使用 SWbemLocator 连接到 WMI。

使用 SWbemLocator 连接到 WMI

  1. 使用对 CreateObject的调用检索定位器对象。

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. 使用对 ConnectServer 方法的调用登录到命名空间。

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

    如果在调用 ConnectServer时未指定计算机,WMI 将连接到本地计算机。 如果未指定命名空间,WMI 将连接到在注册表项中指定的命名空间。

    HKEY _本地 _ 计算机 \ 软件 \ Microsoft \ WBEM \ 脚本 \ 默认命名空间

    默认命名空间为 \ 根 \ cimv2。 有关命名空间的详细信息,请参阅 在 WMI 中创建层次结构

  3. 使用对 SWbemServices _方法的调用设置模拟级别。

    objService.Security_.ImpersonationLevel = 3 
    

    有关详细信息,请参阅 使用 VBScript 设置默认进程安全级别

  4. 实现脚本的用途。

    WMI 公开了各种脚本对象,这些对象用于访问和操作网络上的数据。 有关详细信息,请参阅 操作类和实例信息WMI 的脚本编写 API

    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 将知道它应返回描述系统上第一个 Win32 Get-scheduledjob 的 SWbemObject _ 。 其他可能的返回对象将是 SWbemCollection 或 SWbemServices 对象,具体取决于所述的名字对象。

    • 您可以选择设置连接的安全级别。 但请注意,不能在名字对象中设置名称和密码信息。 有关详细信息,请参阅 保护脚本客户端

    • 你可以根据需要定义 WMI 对象的路径。 这包括本地或远程计算机、命名空间以及类的名称。 有关在 WMI 脚本中使用 VBScript GetObject 的详细信息,请参阅 创建实例检索 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 中编写脚本