勇芳软件工作室.汉化:  Windows Management Instrumentation > Creating WMI Clients > Creating a WMI Application or Script >

Creating a WMI Script

Previous pageReturn to chapter overviewNext page

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