当前位置:DOS资源站资料中心入门文章 → WMI轻松入门之二——连接到指定的CIM命名空间

WMI轻松入门之二——连接到指定的CIM命名空间

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-5-13 19:22:12

四、常用的脚本对象库

WMI脚本对象库由24个对象组成,在脚本中心有一副脚本库对象模型的图,有兴趣的朋友可以参考一下,作为入门,我们一般只用到其中的四个对象,其继承和层级关系如下:

SwbemLocator教本库对象→SwbemServicesWMI服务对象→SwbemObjectSet类实例集合对象→SwbemObject类的实例

好了,现在让我们来举个例子,详细说明一下这四个对象在脚本中的应用方法:

例一:用来检索计算机上安装的光驱:

strComputer = "."

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

Set objSWbemServices = objSWbemLocator.ConnectServer

Set colItems = objSWbemServices.ExecQuery("Select * from Win32_CDROMDrive")

For Each objItem in colItems

   WScript.Echo "光盘驱动器的类型: " & objItem.Caption

   WScript.Echo "盘符是: " & objItem.Id

Next

例二:用来检索CPU型号

strComputer = "."

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

Set objSWbemServices = objSWbemLocator.ConnectServer

Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_Processor")

For Each objSWbemObject In objSWbemObjectSet

   Wscript.echo  "CPU的型号为:" & objSWbemObject.name

Next

请注意,这两个脚本虽然简单,却代表了WMI脚本设计中最普遍的东西,可以说是很典型的脚本。让我们来仔细观察一下这两个脚本,讨论讨论一下脚本访问WMI的基本方法:我们可以看到整个脚本的执行过程基本相同:

①定义了SwbemLocator的实例;SwbemServices、SwbemObjectSet、SwbemObject对象;创建了SwbemLocator的实例;②通过SwbemLocator的ConnectServer方法连接到WMI,获得SwbemServices的实例集合;③枚举集合中的每个实例;④显示各实例的一些属性。

让我们来详细说明一下各行代码的详细含义,并请仔细回想我们第二部分WMI基本结构中谈到的编写WMI脚本的基本步骤:(注意:考虑到脚本的简易,我们编写的脚本一般只在本地计算机进行检索,我们只介绍涉及本地的这一部分,涉及到访问远程计算机的部分我们就省略了,其实随着计算机安全技术的发展,仅凭WMI访问远程计算机的可行性是越来越小了)作者:临汾市外事旅游局薛靖澜,转载请注明

1、连接到指定的CIM命名空间

要用WMI对象编程,必须首先创建WMI对象脚本库的实例,连接到目标计算机的CIM命名空间。

方法一:

步骤一、建立SwbemLocator对象的实例。代码为:

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

然后用SwbemLocator对象的ConnectServer方法(SwbemLocator对象只有1个只读属性Security_和1个方法ConnectServer)建立WMI服务的连接,返回一个命名空间的连接(SwbemServices对象),代码为:

Set objSWbemServices = objSWbemLocator.ConnectServer()

ConnectServer方法共有8个参数,所有参数都是可选的,其参数格式如下:

ConnectServer([strComputName],[strNamespace],[strUser],[strPassword],[strLocale],[strAuthority],[iSecurityFlags],[objwbemNamedValueSet])

考虑到WMI的复杂性,在使用中我们如果只是在本地计算机上进行检索和查询,那么我们只需要设置第1、2个参数,其它参数都可以省略;如果想连接到远程计算机,一般需要对前4个参数进行设置,我们也只对此做个简单的介绍。

strServer——计算机名,缺省为本机,本机也可以用”.”

strNamespace——需要登录的CIM命名空间,例如:"root\CIMV2",缺省为"root\CIMV2"。

方法二:用moniker名字法建立WMI服务的连接,这也是微软推荐的连接方法作者:临汾市外事旅游局薛靖澜,转载请注明

moniker名字法是利用GetObject函数直接建立WMI服务的连接,它的要点就是通过编写一个moniker字符串作为GetObject函数的参数,然后返回一个SwbemServices对象。

关于moniker字符串的完整格式如下:

"winmgmts:[{SecuritySettings}!][\\ComputerName][\Namespace][:ClassName][.KeyProperty='Value']"

"winmgmts:"是前缀, 表示为WMI服务,必须使用;第二部分用来验证权限和假冒级别的,省略。第三部分为计算机名字:"\\.\"是计算机名字,默认可省略,其余同上;第四部分CIM命名空间:缺省的命名空间为"root\CIMV2",默认可省略。

第五部分为类名。第六部分为属性值。注意:当该moniker字符串不包括最后2项时(即为:"winmgmts:[\\ComputerName][\Namespace]"),则GetObject(moniker字符串)返回的是一个命名空间的已验证的连接(SwbemServices对象);当不包括最后1项时,返回的是一个CIM类(SWbemObject对象);当包括最后2项时,返回的是一个类的单独实例(SWbemObject对象)。