2.获得类的实例
我们有4种方法获得类的实例,其中方法1和方法2是通过SwbemServices对象的InstancesOf方法和ExecQuery方法来获得某个类的多个实例组成的集合对象。方法3和方法4则是返回单独的类的实例,即返回的是一个SWbemObject对象。
1)InstancesOf方法获得类的实例集合
InstancesOf方法的语法参数格式如下:
SwbemServices.InstancesOf(strClass)
strClass为类名,例如"Win32_Service"
回顾例二,就是用语句:Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_Processor ") 来获得"Win32 Processor "类的所有实例集合,然后我们可以用
For Each objSWbemObject In objSWbemObjectSet
……
Next 作者:临汾市外事旅游局薛靖澜,转载请注明
语句获得每一个类的实例SWbemObject对象,然后就可以根据我们的需要,进行相应的操作。
2)ExecQuery方法获得类的实例集合
与InstancesOf方法不一样的是,ExecQuery方法可以通过查询语句,只返回匹配部分实例和属性。ExecQuery方法的语法参数格式如下:
SwbemServices.ExecQuery(strQuery)
strQuery为WMI查询语言(WQL)构造的一个查询语句字符串。
例如:作者:临汾市外事旅游局薛靖澜,转载请注明
Set objSWbemObjectSet = objSWbemServices.ExecQuery("select ProcessorId from Win32_Processor where DeviceID='cpu0'")
3)Get方法获得一个类的实例(SWbemObject对象)
此方法也就不必再用 For Each objSWbemObject In objSWbemObjectSet :……:Next 语句从SWbemObjectSet对象中获得每一个类的实例SWbemObject对象,Get方法的语法参数格式如下:
SwbemServices.Get([strObjectPath][.KeyProperty='Value'])
strObjectPath是类的名字
KeyProperty是主键属性名
Value是指定的主键属性值
这里要注意的是如果要获得一个类的实例,则strObjectPath.KeyProperty='Value'中的任何一项都不能省略,例如:
Set objSWbemServices = GetObject("winmgmts:")
Set objSWbemObject = objSWbemServices.Get("Win32_Processor.DeviceID='cpu0'")
Wscript.echo “CPU的型号为”:" & objSWbemObject.ProcessorId
看,结果一样,脚本却简化了不少。
4)直接用moniker名字法获得一个类的实例
在说明Moniker名字法的时候我们说过,当包括最后2项时,返回的是一个类的单独实例,如:Set objSWbemObject = GetObject("winmgmts:Win32_Processor.DeviceID='cpu0'")
Wscript.echo "首枚CPU序列号:" & objSWbemObject.ProcessorId
是不是更加简单?仅仅2条语句就获得了CPU的序列号。
3.读取类的实例属性,调用类的方法
实在是太多了,你可以参照C:/WINDOWS/system32/wbem/cimwin32.mfl文件中,对所有类的属性和方法的描述。也可以用下列代码查询,虽然看起来有点困难,不过看的多了也就明白了。作者:临汾市外事旅游局薛靖澜,转载请注明
strClass=inputbox("请输入你要查询的类")
strComputer = "."
strNameSpace = "root/cimv2"
Const wbemFlagUseAmendedQualifiers = &h20000
Set objWMIService = GetObject("winmgmts://" & strComputer & "/" & strNameSpace)
Set objClass = objWMIService.Get(strClass, wbemFlagUseAmendedQualifiers)
strMOF = objClass.GetObjectText_
WScript.Echo strMOF