图二
图二显示了搜索关键词logical得到的结果。选择Win32_LogicalDisk并点击OK,图三的窗口出现(为什么不选择CIM_LogicalDisk?前面已经提到,WMI管理的所有对象都带有Win32前缀。如果选择CIM_LogicalDisk然后要求显示出它的实例,不可能看到可用逻辑驱动器的任何具体信息,只能看到对应每一个可用逻辑驱动器的Win32_LogicalDisk条目)。现在,窗口的右边显示出Win32_logicalDisk类的属性。可以看到,属性的值都为空,这是因为我们正在查看的是一个类,而不是类的具体实例。要显示出Win32_LogicalDisk类的实例,点击右边上面的Instances按钮(右数第四)。
图三
点击Instances按钮之后,窗口显示出当前机器上所有逻辑驱动器的实例,包括网络逻辑驱动器。点击设备ID为“C:”的实例,显示出图四的结果。右边窗格包含了当前实例的属性和方法,当前逻辑驱动器的名称显示在右边窗格的上方。

图四
利用脚本可以修改这些属性或调用这些方法。如果对某个属性的含义不太清楚,只需选择Win32_LogialDisk类或Win32_LogicalDisk.DeviceID="C:"实例,再点击Help按钮。大多数对象的属性和方法都有详细的说明。
CIM分三层。第一层是核心模型(Core Model),这一层包含的类定义对于所有管理领域来说都是共同的。第二层是公共模型(Common Model),这一层包含的类定义对于特定的管理领域来说是公共的,但与具体的操作系统和系统设计无关。第三层是扩展模型(Extension model),这一层包含的类定义与特定的操作系统或技术有关。
WMI是Microsoft扩展CIM 2.0得到的面向Win32系统的扩展模型。引用WMI类和属性的形式是“扩展前缀_类名称.属性名称”,例如Win32_ComputerSystem.Name,其中Win32是CIM模式cimv2名称空间内WMI扩展类的前缀,ComputerSystem是类,Name是属性。
编写WMI脚本的很大一部分工作涉及到读取和设置属性值。当前,WMI提供的方法还很有限,但随着时间的推移,相信WMI和CIM提供的方法都会越来越丰富。
四、脚本编程初步
前面我们通过SDK查看了Win32_LogicalDisk类和它的属性,下面来看看如何在脚本中访问这些信息。如果你的系统上安装了Microsoft Windows 2000 Resource Kit,\program files\resource kit文件夹下默认会有一个listfreespace.vbs脚本。这个脚本查询Win32_LogicalDisk类的各个对象,分别提取一组属性值:DeviceID,即驱动器标识符;FreeSpace,驱动器空闲空间的字节数。假设一台机器的A:是软盘驱动器,D:是CD-ROM驱动器,listfreespace.vbs的输出类如:
A: not available
C: 8,243,381,248 bytes
D: not available
下面显示了getfree.vbs脚本程序的代码,它用更少的代码获取类似的信息。启动getfree.vbs时要指定驱动器标识符,getfree.vbs将显示出驱动器空闲空间和文件系统类型。
' 变量声明
Dim driveArg, dObject, driveName
' 创建文件系统对象,并将该对象赋值
' 给dObject变量(drive object的缩写)
Set dObject = CreateObject("Scripting.FileSystemObject")
' 如果用户没有在命令行指定待查询的驱动器标识符,
' 则显示错误信息并停止运行脚本
If Wscript.Arguments.Count < 1 Then _
Wscript.Echo "请在命令行参数中指定要查询的驱动器,例如C:",_
Wscript.Quit(1)
' 把用户指定的驱动器标识符提供给文件系统对象,
' 在driveArg中保存对应的绝对路径名
driveArg = dObject.GetAbsolutePathName(Wscript.Arguments(0))
' 获取用户指定的驱动器的名字
driveName = dObject.GetDriveName(driveArg)
' 提取指定驱动器的属性信息
' 在对话框中显示这些信息
With dObject.GetDrive(driveName)
Wscript.Echo "驱动器", .DriveLetter,":空闲空间是",.Freespace / 1024,_
"KB,文件系统是", .FileSystem
End With
' 结束...
Set dObject = Nothing
在Windows命令行窗口中,执行“Wscript getfree.vbs c:”将显示出类如图五的结果。如果执行“Cscript getfree.vbs c:”,则提示信息以字符方式显示。

图五
又如,下面的VBScript脚本提示输入远程机器的名字,然后关闭指定的远程机器:
MachineName = InputBox("输入要关闭的远程机器名字") Set OSSet = GetObject("winmgmts:{(Debug,RemoteShutdown)}//"& MachineName &"/root/cimv2") .ExecQuery("select * from Win32_OperatingSystem where Primary=true") for each OpSys in OSSet OpSys.Shutdown() next
当然,如果只有本文的知识,你还不能算是一个WMI脚本编程的高手。但现在你已经了解了如何用SDK查询信息,如何通过脚本访问对象的属性和方法。继续努力吧!
共2页: 上一页 [1] 2 下一页 |