初认识WMI
什么是WMI?
WMI是Windows Management Instrumentation的缩写,简单来说就是我们可以使用来获得和管理Windows各种信息的接口。更官方的介绍可以查看这篇文章:
http://www.microsoft.com/china/M ... pting.mspx?mfr=true
到具体操作时,我们将使用WQL。什么是WQL?从字面上看很熟悉吧,熟悉数据库的朋友马上会想到SQL。是的,WQL是类似SQL的结构化查询语言,两者的语法也很像,因此熟悉数据库的朋友很快就能理解。不熟悉的朋友也不要担心,因为WQL还是比较容易理解的。下面简单来举一个WQL的例子:
代码:
Select * from Win32_Account
其中“select * from ”一般情况下我们可以不去改动,Win32_Account就是WMI的庞大数据库里的一个分支。既然说道庞大,那肯定会有朋友问,我们如何知道所有的分支呢?其实Windows已经自带了一个工具供我们查找。在“运行”对话框中输入“c:\windows\system32\wbem\wbemtest.exe”将会启动“windows管理规范测试器”,随后我们单击“连接”,在第一个文本框中输入“root\cimv2”,其它选项保持默认,然后单击连接返回程序主界面。我们再单击枚举类别,在“超类别信息”中选择“递归”,再次单击确定将出现查询结果,其中以Win32开头的都是我们有可能会用到的类别,因此大家如果哪天想要取得某一信息的时候不妨用这个工具查看一下。如果嫌这个方法比较麻烦的话不妨去下一个叫vbsedit的程序,它能大大减轻我们在使用WMI编程时的负担。
下面举的一个例子是我在winos解决的一个问题,我先放出代码,随后再解释。
代码:
On Error Resume Next '错误处理
strComputer = "." '“.”在WMI代表本地计算机
Set bjWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'连接到WMI
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process where name ='notepad.exe'") '执行WMI查询
'notepad.exe为需要检测的是否已经运行的进程!
If colItems.count = 0 Then
mshell.run("notepad.exe") '指定要运行的程序
Else
wscript.Echo "程序已经运行。"
End if
要在脚本使用WMI,首先需要创建WMI对象,使用
代码:
strComputer = "."
Set bjWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")即可
随后执行WMI查询即可Select * from Win32_Process where name ='notepad.exe'"其中where后跟随的是附加条件。如果是一般枚举信息的话可以参考以下脚本。
代码:
On Error Resume Next
strComputer = "."
Set bjWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process",,48)
For Each objItem in colItems
WScript.Echo "Caption: " & objItem.Caption
WScript.Echo "ProcessId: " & objItem.ProcessId
WScript.Echo ""
Next
以上脚本将会显示当前的进程及其PID,建议使用“cscript. test.vbs”执行。
大致来说WMI的使用就是这样,大家可以去http://www.microsoft.com/china/t ... center/default.mspxTechnet的脚本中心查阅更多的脚本