WMI脚本可以缩减C ++程序中所需的许多步骤。它们可以连接到WMI,不仅可以通过SWbemLocator对象,也可以通过绰号winmgmts:连接到WMI。昵称是在WMI中定位命名空间,类或实例的短名称。名称winmgmts:是WMI标记,告诉Windows脚本主机使用WMI对象,连接到默认命名空间,并获取一个SWbemServices对象。其他连接信息(如模拟级别或特定类或实例)出现在名称后的字符串中。您可以在创建或获取WMI对象的调用中使用标记。有关详细信息,请参阅构造Moniker字符串.
以下过程介绍如何使用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_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\
脚本编写\\默认命名空间
默认命名空间为\\ root \\ cimv2。
Windows NT 4.0和Windows Me / 98/95:默认命名空间为\\ root \\ default。
有关命名空间的更多信息,请参阅在WMI中创建层次结构.
3.通过调用SWbemServices.Security_方法设置模拟级别。
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并使用标记检索对象
· | 在输入参数中使用昵称调用GetObject. |
Set MyObject = GetObject( _
"winMgmts:{impersonationLevel=impersonate}" _
& "!Win32_Service=""ALERTER""")
有关在WMI脚本中使用VBScript方法GetObject的更多信息,请参阅创建实例并检索实例.
在上一个示例中,模仿或impersonationLevel = 3是默认的进程安全级别。在Windows 2000及更高版本的以下示例中,无需指定此进程安全级别,除非您需要将进程安全性更改为委派。有关详细信息,请参阅使用VBScript设置默认进程安全级别.
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