使用 VBScript 连接到 WMI
WMI 脚本可以压缩 C++ 程序中所需的许多步骤。 它们不仅可以通过 SWbemLocator 对象,而且还可以通过名字对象“winmgmts:”连接到 WMI。 名字对象是用于在 WMI 中定位命名空间、类或实例的短名称。 名称“winmgmts:”是告知 Windows 脚本宿主使用 WMI 对象、连接到默认命名空间并获取 SWbemServices 对象的 WMI 名字对象。 其他连接信息(例如模拟级别或特定的类或实例)显示在名字对象名称后面的字符串中。 可以在创建或获取 WMI 对象的调用中使用名字对象。 有关详细信息,请参阅构造名字对象字符串。
以下过程说明如何使用 SWbemLocator 连接到 WMI。
使用 SWbemLocator 连接到 WMI
通过调用 CreateObject 检索定位符对象。
Set Locator = CreateObject("WbemScripting.SWbemLocator")
通过调用 ConnectServer 方法登录到命名空间。
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2")
如果在 ConnectServer 调用中未指定计算机,则 WMI 会连接到本地计算机。 如果未指定命名空间,则 WMI 会连接到注册表项中指定的命名空间。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace
默认命名空间为 \root\cimv2。 有关命名空间的详细信息,请参阅在 WMI 中创建层次结构。
通过调用 SWbemServices.Security_ 方法设置模拟级别。
objService.Security_.ImpersonationLevel = 3
有关详细信息,请参阅 使用 VBScript 设置默认进程安全级别。
实现脚本的用途。
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 并使用名字对象检索对象
在输入参数中使用名字对象调用 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")
名字对象包含许多可用于连接到 WMI 的元素:
“winmgmts:”告知 WSH 使用脚本 API 对象。 在此特定示例中,WSH 知道它应该返回一个描述系统上第一个 Win32_scheduledJob 的 SWbemObject。 其他可能要返回的对象是 SWbemCollection 或 SWbemServices 对象,具体取决于名字对象描述的内容。
可以选择性地设置连接的安全级别。 但请注意,不能在名字对象中设置姓名和密码信息。 有关详细信息,请参阅保护脚本客户端。
可以选择性地定义 WMI 对象的路径。 这包括本地或远程计算机、命名空间以及类的名称。 有关在 WMI 脚本中使用 VBScript GetObject 的详细信息,请参阅创建实例和检索 WMI 实例。
你还可以选择检索 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
在以上示例中,impersonate 或 impersonationLevel=3 是默认的进程安全级别。 在以下示例中,除非需要将进程安全级别更改为 delegate,否则没有必要指定此进程安全级别。 有关详细信息,请参阅 使用 VBScript 设置默认进程安全级别。
相关主题