WMI的WQL简明教程系列的前四篇文章[1,2,3,4]完全介绍WQL的各个基本知识,相信对于WMI的WQL的开发来说,这些知识已经足够我们步入WMI的世界,并能准确的驾驭WQL中的各个使用细节了。这些掌控的所有细节,自然只有在实战中进行发挥,才能体现我们学习WMI的WQL的作用。在实际中使用,我们还需要一些辅助的工具来进行开发。WMI的基本知识就像是武功修练中的内功心法,我们练得非常的醇厚,自然可以徒手独步武林,但在我们还没有练到随心所欲,化腐朽为神奇的境界,选择个武器共创天地也不失是个好主意,同样的道理,在全然彻底的了解WMI中的方方面面的时候,工具神码都是浮云,而在我们未能做到这个之前,选择一些工具来帮助我们就显得非常重要了。
由于MitchellChu也是初涉WMI不久,在WMI中的工具可能涉及不够全面,因此如果有不正确的地方,请各位不吝赐教。下面是用过的一些工具,以表格方式放出:
工具名称
|
描述
|
wbemtest.exe
|
系统自带的WMI测试器工具,你可以使用这个工具连接到相应的命名空间下进行查询等操作。
|
dcomcnfg.exe
|
该功能并非WMI的工具,而是通过该工具能够启动WMI服务(winmgmt)
|
wmimgmt.msc
|
wmi配置程序
|
wmic.exe
|
wmi命令行工具
|
WMITools.exe
|
非系统自带工具,是官方提供的WMI 工具集,安装后,能够提供WMI CIM Studio ,WMI Event Registration,WMI Event Viewer,WMI Object Browser等实用工具。该工具应该说是WMI开发中不可或缺的WMI工具。下载地址为:WMITools.exe或下载页:download
|
上面这些工具只能够让我们选择和查看相应的WMI信息,如果需要用程序操作,在系统层面,WSH(Windows Scripts Host)就显得很重要了,WSH提供脚本引擎,一个是wscript.exe,另外一个是cscript.exe,两者都是能够针对.wsh,.vbs,.js进行解析,前者是windows窗口中运行,后者则是在命令行中运行。嗯嗯,偏题了,这是WMI的主题,那么更多的信息可以参见WSH网络上的解释。要说明的意思是,如果你有要操作的,可以用VBSCRIPT或者JScript来编写脚本,并在WSH中使用即可。当然,你还可以在其他程序中使用WMI,比如C++,.NET中,均可用编程的方式使用WQL来调用WMI中的CIM类或实例。
关于WMI命名空间:
WMI命名空间用于对相同环境中存在的类进行分组,也用于加强安全限制。当请求连接到一个命名空间时会检查用户的权限,这决定命名空间级别的权限。命名空间是一个层次结构,类似文件系统中文件夹的层次结构。
WMI中常见的命名空间:
命名空间
|
描述
|
root
|
所有命名空间均在这个命名空间下,此命名空间只包含WMI系统类,这些类也会在其它命名空间中出现。(WMI系统类是在名称前面有两个下划线("_")组成,可以非常方便的查询)
|
root\Default
|
与windows注册表操作有关的主机类 ,读取、写入、枚举、监视、创建、删除注册表项和值。
|
root\Security
|
用于与windows安全有关的类
|
root\CIMV2
|
包含从CIM Schema派生的类,它们代表着我们最常工作的win32环境。比如:获取系统信息,管理 Windows 事件日志等
|
root\MicrosoftIISv2
|
IIS WMI 提供程序。 .NET下管理 IIS的API在Microsoft.Web.Administration这个命名空间下。
|
root\RSOP |
策略的结果集 |
root\Policy |
组策略 |
root\directory\ldap |
Active Directory提供程序 |
有些朋友在网上找获取硬盘序列号的例子,一找说用WMI可以获取,可是代码中却要连接到root\CIMV2这个命名空间下,就非常不解,怎么要连这个命名空间呢?而好多写代码的也一知半解,不能给出完整的说明。其实这是因为微软将所有涉及到Win32系统的信息都集成在CIMV2的原因。
关于WMI对象的路径:
千言万语不及代码一行:
;========================================
; http://blog.useasp.net/
; MitchellChu's Blog
; WMI tutorial
; WMI路径说明
;========================================
\\ComputerName\root\CIMV2:Win32_Account
--------------=----=-----=--------------
| | | | |- WMI中类名称(区分大小写)
| | | |
| | | |- 命名空间和WMI类名称的分隔符
| | |
| | |- 命名空间分隔符(主机名称也看作是命名空间理解跟方便)
| |
| |- 主机名称,远程的填写名称,本地可以简单的以点(".")代替
|
|- 主机名称前导符,固定用双斜杠表示,如果是本地,可以省略前导符和主机名称
\\ComputerName\ 这个如果是本地可以省略哦...
看明白了吧,\\.\root\CIMV2:Win32_Account这个路径代表的就是Win32_Account类的路径,当然,本地也可以直接root\CIMV2:Win32_Account这样了。
WMI中WQL就说的差不多了,毕竟是简明的基础教程嘛~~ 剩下的要靠自己参悟了哦,欢迎前来交流学习心得。Enjoy it.