[UMU WSH 教程](12)常见对象 - InternetExplorer.Application
[UMU WSH 教程](13)常见对象 - Shell.Application
本篇只为告诉人民群众 WMI 很强,网络上可以找到很多应用,不需要 UMU 多说了,先看一下微软的介绍:WMI 脚本入门:第一部分、第二部分、第三部分。
一些相关工具:WMI Code Creator v1.0、Scriptomatic 2.0、Do-It-Yourself Script Center Kit、The WMI Diagnosis Utility -- Version 2.0。
系统里与 WMI 相关的服务程序存放在 %SystemRoot%\system32\wbem 目录下,比如 WINMGMTS 对象的服务程序是 %SystemRoot%\system32\wbem\wbemdisp.dll,类型库文件是 %SystemRoot%\system32\wbem\wbemdisp.TLB。这个类型库没放在 DLL 资源里,所以不能用 eXeScope 查看了,应该用更专业的 OleView。

下面两个例子,都出自微软脚本中心,UMU 做了一些修改。defragment_drive.vbs 用来给 D 盘做碎片整理:
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colVolumes = objWMIService.ExecQuery _
("Select * from Win32_Volume Where Name = 'D:\\'")
For Each objVolume in colVolumes
errResult = objVolume.Defrag()
Next
defragment_status.vbs,用来检查所有卷是否需要碎片整理:
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colVolumes = objWMIService.ExecQuery _
("Select * from Win32_Volume")
For Each objVolume in colVolumes
objVolume.DefragAnalysis blnRecommended, objReport
If blnRecommended = True Then
Wscript.Echo "Volume " & objVolume.Name & " should be defragged."
Else
Wscript.Echo "Volume " & objVolume.Name & " does not need to be defragged."
End If
Exit For
Next
利用 WMI 可以很方便地实现自动化管理 Windows,用途很广泛。不过应该说 WMI 只是一个过渡产品,未来的天下的 .NET 的,现在微软已经推出新一代基于 .NET 的脚本语言 Windows PowerShell 了,它不止可以方便访问 COM 对象,还可以像 C# 那样访问 .NET 类库,可谓功力深厚,远超 WSH 了。之前 Unix 管理员一直嘲笑 Windows 下的脚本太弱,现在他们应该闭嘴了!(请见 Paul Robichaux 的文章 Introducing Windows PowerShell)大家有兴趣也应该研究一下 PowerShell 了,代码看上去有点像 Perl 和 PHP,和 VBS 比较不像,从 JS 转到 PowerShell 相对比较容易,不过微软有提供文档帮助大家从 VBS 转到 PowerShell。