WMI入门教程之WMI中的类在哪里?
使用wmi归根到底是对wmi类的访问,如何找到合适的类是其中关键的一步。我一直在为找不到合适的类和命名空间苦恼。你也有这样的问题吗?
类层次结构
wmi的类是以命名空间和继承层次方式组织的,呈树形结构。命名空间的根是root,在它的下面还有十几个命名空间,最常用的是root\cimv2。命名空间的信息存储在静态类__namespace类中,要查询当前命名空间下的所有命名空间,可以查看__namespace类的实例。以下是在我的机器上使用powershell查询到的命名空间:
ps c:\users\idsswtt> get-wmiobject -class __namespace -namespace root | select name
name
----
subscription
default
cimv2
cli
nap
microsoftiisv2
security
smsdm
ccmvdi
rsop
webadministration
ccm
wmi
directory
policy
virtualization
interop
hardware
servicemodel
microsoft
aspnet
关于命名空间更详细的信息,可以写一个递归的脚本来取得,或者从wmi入门(二):如何使用wmi中提到的wmi cim studio工具中查到。
常用wmi类
wmi体系结构中有成百上千个类。我们经常用到的只有其中一部分。其中有些是用来查询实例的,另一些用来查询类的schema的。除了上面提到的__namespace类,我们还会用到__win32provider类,来查询当前系统中都有哪些提供程序。这两个类是系统类。
此外,还有两类wmi类我们经常用到:cim_*类和win32_*类。前者是wmi的核心类和公共类,很多时候也被称为cim核心类和公共类。后者是win32扩展类,我们查询实例多在win32扩展类中查询。例如win32_product、win32_logicaldisk等。
wmi类查找手册?
很遗憾的是,到目前为止。我没有发现一个好用的wmi类查找手册。但在微软msdn网站上,有一个分类。我们可以依照这个分类来做查询。以下几个链接是我经常用到的,贴在这里,希望你能用到。
结语
看完上面我写的这些东西,如果你还是找不到你要的类,那你就只能怪微软了。我觉得微软为wmi做的还是太少,至少在类查询这一块儿是这样。在微软为wmi投入更多之前,我们只能依赖经验和搜索引擎来寻找适当的类了。