概述 WMI是Microsoft用来支持企业管理系统而引进的几项技术之一。 Active Directory提供了企业范围内的地点、政策和组织管理信息。Microsoft® 管理控制台系统(MMC)是编写应用管理程序时的标准框架。 Script Host系统(WSH)允许管理人员自动处理复杂的任务。最后,WMI是基于操作系统,及其应用程序的一项远程控制的技术。
WMI允许应用程序的开发者,使用简单的、一致的机制,去查询企业中的任一台计算机上的信息,或是进行系统配置。通过WMI接口可以获得的信息量是惊人的,包括硬件设置,状态信息,驱动器配置,BIOS信息,应用程序的设置,事件记录信息,以及其他。WMI通过一组API来获得信息,但它表征的是一种通过一个简单,工业标准对象管理模式来获取信息的函数。这使得应用程序的开发者不必学习Windows的每一个API的具体细节。
要理解这样做的效果,假定应用程序的开发者想枚举出机器上四种不同类型的对象:服务,指针,过程和CPU。如果没有WMI系统,该开发者只好寻求不同的API来完成不同类型的枚举;但是使用WMI系统,这就变得相当简单了,这是因为每一对象类型都是以同一种方式枚举的。例如图1(Figure 1)显示了,用VBScript代码编写的WSH系统完成此任务是如何的简单。
如果你运行的是Windows 2000,你可以将这段代码拷贝到ENUM.VBS文件中,并且在控制台窗口运行cscript.ENUM.VBS命令。如果遇到错误,最可能的原因是,为了使该程序更短而忽略了对空指针的查错。例如,若系统不存在已安装指针的备注列表,obj.Description文件将返回空指针。
如果,你运行的操作系统是Windows 9x或是Windows NT® 4.0,WMI控件是可选组件。在Microsoft的网站上可得到最新版本的WMI。
显然,图1中的程序也可以用来枚举远程机器上的同样信息。要显示MYSERVER的信息,只需使用WinMgmts://MYSERVER在首行作为GetObject的参数。实际上,不论是从本地或是从远程的机器,WMI得到的信息,都是使用同一个API得到的。虽然某些Win32 API提供辨认远程计算机的功能,其他的API只能访问本地的机器,无法实现从远程计算机上得到信息。
WMI还能使对被管理对象的信息进行设置,以及调用变得简单。可以采用同样的语法结构来进行中止服务,结束进程,或是从远程计算机注销用户,等操作。应用程序的开发者只需知道对象的名称,以及准备进行的操作的名称,而没有必要了解一个新的API。
为完成所有事情,事件的基础结构将对通过WMI可以访问的对象给出修正信息。在本文的稍后部分,我将举一个创建和撤销监视器进程的例子;另一个例子是当插入或取出软盘时产生一个提示信息。WMI对象管理各类型操作采用的是同样的函数。甚至当基本API不提供针对对象的此类信息,WMI体系结构可以模拟监控这些事件的行为。另外,WMI服务自由的提供所有这些功能的远程访问。
除了WMI已经列出的信息,应用程序还可以列出他们自定义的对象和事件。这样,任意WMI管理程序就能管理你的其他应用程序,包括远程配置,修改提示信息,或是接受自定义事件。
WMI技术的起源 虽然WMI是Microsoft开发的技术,但是它是建立在近年来才引入的工业标准的基础上的。要了解WMI,就需要了解它从最初的所谓企业网络管理系统(WBEM)的演化过程。几年以前,为建立企业系统和设备管理系统的标准体系,一些计算机公司创建了WBEM系统。最初的目的是,开发单一的管理企业任意网络组件标准体系。这将简化由诸如SNMP标准体系,DMI桌面标准体系,等多个独立体系存在而引起的问题。将来,计算机公司开发与WBEM相配套的硬件,软件,以及操作系统,都将能以同样的方式进行管理。这样,单个管理程序就将能轻易地管理企业范围内的所有不同类型的组件了。实际上,WBEM的最初功能设计是针对(Desktop Management Task Force (DMTF)的。DMTF系统是针对维持实现WBEM系统最初目标所需的标准系统而设计的。
CIM类 最初的WBEM系统的第一个标准是,所谓的常规信息模式(CIM)的管理信息描述函数。CIM采用面相对象函数模拟信息,使用分类定义,分级结构,事例,属性,以及函数描述管理信息。CIM类是通过管理对象格式(MOF)在文本文件中定义的。完整的MOF文件格式系统已经超出了本文的范围,但是,如果你熟悉,JAVA,或是接口定义语言(IDL),则你将对它的语法结构相当熟悉。以下就是如何定义一个类,及其子类的一个例子:
[abstract] class Automobile
{
[key] string Make;
[key] string Model;
void Recall();
};
class Car : Automobile
{
real32 BlueBookValue;
};
class Truck : Automobile
{
uint32 Axles = 2;
};
以上的MOF文件定义了Automobile作为一个基本类,及其两个子类:Car和Truck。Automobile具有Make属性,Model属性,以及Recall函数。Car具有BlueBookValue的额外属性。Truck具有Axles属性,默认值为2(对于Axles而言,如果不另外指定,Truck每一次得到的新的值是2)。括号里的文字(abstract和key)引入了CIM分类参数的概念。分类参数可以应用于整个类,属性,函数或是单独的函数参数。分类参数与IDL文件中属性的概念类似。它们提供了与类,属性和函数的使用相关的额外信息。在这个例子里,abstract类的分类参数意味着,你无法看到Automobile的示例。另一方面,由于Car和Truck不是abstract类,你可以列举Car和Truck的例子。Key属性分类参数意味着任意Automobile(或任意派生类)可以被参数Make和Model唯一确定。这是一个从数据库借用的概念。所有支持多种事例的类需要确定Key属性,即每一种事例必须是Key属性值的唯一组合。换句话说,即使Automobile类定义只允许存在唯一的Ford Mustang事例,但是你可以创建Ford Taurus,甚至Gm Mustang的事例。如果类有且只有一种事例,它可以用单独的一个类的分类参数来描述。在这种事例下,类不再需要确定诸如Key之类的其他属性了。MOF文件格式是用来描述事例或类定义的,以下的示例描述了Truck的一种事例:
instance of Truck
{
Axles = 5;
Make = "Ford";
Model = "Big Rig";
};
单独的CIM标准体系还不足以使公司能创建可管理的对象,并且防止出现混乱。例如,一个公司将器称为网络路由器,而另一个公司将同一个东西称为路由器。甚至更糟的是,两个公司都可以定义同样的类的名称,但属性不同。为防止出现这种混乱,DMTF体系定义了CIM模式。模式是一个所有公司都统一遵循的一个有明确定义的类的集合。通常,作为CIM模式体系一部分的类,以CIM_为前缀(例如,CIM_Battery或CIM_Process)。CIM模式倚重于对分级结构的使用,允许管理程序以同样的方式处理相似对象的群。例如,CIM_Battery,CIM_Printer,以及CIM_Processor都是从基本类CIM_LogicalDevice派生得到的。这要求管理程序了解,如何通过CIM_LogicalDevice来管理有此类派生得到的任意类型的设备。此外,任意派生类都支持基本类的属性和函数。类CIM_LogicalDevice具有确定是否支持电源管理程序的属性(PowerManagementSupported),以及允许设置电源状态的函数(SetPowerState)。通过从基本类功能列表得到的信息,应用程序可以管理打印机,处理器,以及其他任意从CIM_LogicalDevice派生的设备的电源状态。
分级结构的另一个好处是,如果计算机分销商们能够提供比CIM类定义的更多信息的话,他们能够扩展CIM_schema。例如,Windows操作系统知道已安装的打印机AveragePagesPerMinute参数。类CIM_Printer没有定义此信息,因此Microsoft由CIM_Printer派生定义了类Win32_Pointer,此类具有额外属性,AveragePagesPerMinute。知道类Win32_Proiner的管理程序可以使用这个信息,而只知道如何管理CIM_Pointer的管理程序也能正常工作。
WBEM支持 CIM和MOF标准体系,以及CIM模式是最初的WBEM体系的核心组件。这些标准体系是不依赖于操作平台和实现的应用程序的。为使统一的管理成为现实,硬件和软件的分销商们必须创建支持这些标准体系的系统(指的是实现WBEM的应用程序)。这包括通过由CIM模式派生出来的类的功能列表。Microsoft在Windows操作系统上实现WBEM的应用程序是WMI。
并不只有Microsoft支持WBEM系统,硬件厂商也同意为实现WBEM系统提供网络以及设备。Sun公司许诺为实现WBEM提供Solaris操作系统,诸如Tivoli Systems和Computer Associates等管理软件的主要厂商也同意在他们的产品中支持WBEM系统。有了这些软硬件方面的支持,以一种单一的,一致的方式管理企业将成为现实。
WMI体系结构 了解图2所示的WMI组件的体系结构,可以帮助分析WBEM标准体系实现方式的创建。首要的任务是,确定CIM schema中的哪些组件在计算机中运行Windows。第二步是通过将Windows下列出的所有额外信息定义为类,以扩展CIM schema。Microsoft使用的约定类是CIM类派生得到的,类的前缀为Win32_(例如,Win32_NetworkAdapter就是由CIM_NetworkAdapter派生得到的类)。最终,你仍需要编写某些软件,来实际提供管理功能。保留已有的被支持类的列表是必须的,并且当类的不同事例需要时,还需要提供某些实际数据;通过完成所要求的操作,来响应函数对对象的调用也是必须的。在最初的术语中,这被称为CIM对象管理程序(CIMOM)。在Windows NT中,CIMOM处于WinMgmt服务包中,通过WinMgmt.exe文件
【责编:admin】
--------------------next---------------------