定义
WMI(Windows Management Instrumentation)作为Windows操作系统的对外的管理接口,被广大Windows 管理员和开发人员熟知。WMI主要基于Web的企业管理类(WBEM,Web-Based Enterprise Management)和通用信息模型(CIM,Common Information Model)标准来进行实现,这两个标准都出自分布式管理工作组(即Distributed Management Task Force)。其中CIM为系统、网络、应用程序和服务提供了一个通用的管理信息定义。这个标准包含有规范、模式和元模型,为操作系统供应商提供一个标准来管理他们的产品。CIM提供了一些表示信息(如计算机硬件和软件等)的标准类,同时也为供应商们提供了扩展性,让他们可以增加一些产品特性相关的属性。
WMI的历史
WMI是微软对CIM的实现,它最早出现在Windows NT 4.0中。由于Microsoft是早期的采用者,DCOM用于远程管理,因为当时还没有其他定义的标准。DCOM是Distributed COM的缩写,它使用远程过程调用(Remote Procedure Calls, RPC)来进行远程连接,如果所有设备都在同一个网络上这一方案是可行的,但是一旦这些DCOM被NAT路由器和防火墙分隔开,就很难再实现远程连接。
在Windows Server 2012和Windows 8中,微软对WMI做了一些更改,使其符合CIMv2标准,并将远程连接改为WS-MAN标准。因为WS-MAN是一种基于http的协议,所以它比DCOM对防火墙更友好。不过对于开发者来说,值得注意的是,微软为了向后兼容,开发者可以继续使用DCOM访问新的更改后的WMI栈。
微软打算弃用WMI
微软已经开始弃用Windows中的WMI命令,转而支持CIM命令。例如,如果使用PowerShell进行管理,应该使用CIM cmdlet而不是WMI cmdlet。因为WMI cmdlet要被淘汰了,因此微软不再对其进行开发和维护。目前PowerShell核心甚至已经不再包含WMI cmdlet,必须使用CIM。由于CIM使用WS-MAN进行远程访问,所以连接到远程系统更加容易。
之前我们通过下面的命令使用Get-Wmiobject PowerShell cmdlet来获取关于操作系统的信息:
Get-WmiObject -Class Win32_OperatingSystem
在Powershell Core当中,应该改换为:
Get-CimInstance -ClassName Win32_OperatingSystem
开放管理基础设施(OMI)
CIM不是完美的解决方案。虽然理论上来讲CIM可以用作任何类型设备的管理模型,但它可能难以实现,而且对于移动设备和嵌入式设备来说,CIM过于笨重。随着越来越多的物联网IOT设备连接到云,很多供应商迫切需要一个更灵活的解决方案。为此,微软与Open Group合作开发了一种新的开源解决方案,称为Open Management Infrastructure。OMI是开源的,这种基于标准的管理在任何设备上都可以免费用使用。
OMI是一个可移植的、占用空间小的、高性能的CIM对象管理器。OMI支持DMTF标准、使用WS-MAN实现远程可管理性、并且与WMI的API兼容。OMI还支持CIM ide(类似Visual Studio的ide)。OMI的基本大小只有250KB,使用时只消耗1MB内存。
因为OMI并不是完整的CIM,所以一些之前的产品不符合OMI标准。现在开始,匹配Windows 2012和Windows 8或更高版本操作系统而编写的软件也应该同时兼容OMI。