wmi基础

2.1 WMI的起源和概念
一些年前,几家计算机公司(BMC软件,Cisco系统公司,英特尔和微软)决定解决系统管理领域缺少标准的问题.
        它们联合在一起,开始一个称为基于万维网的企业管理(WBEM,Web Based Enterprise Management)的创新行动.


        后来,WBEM交给了标准化领导机构---分布式管理任务组(DMTF,Distributed management Task Force)
        (
http://www.dmtf.org)
        DMTF启动了一个称为通用信息模型(CIM,Common Information Model)的项目.
                CIM是以面向对象原理为基础的.它的类是抽象的,因为它们需要在任何环境中表示管理对象\
                (比如系统,设备,应用程序和网络)的一般类型.而不受限于任何特定的实现环境.

                
                CIM规定提供了构建这种模式的一个模型(称为Schema)和一种语言.

                
2.1.1 CIM Schema

Schema是具有各种特征的组织结构.
在CIM的条件下,这种结构就是类的层次结构以及它们的方法,属性,限定词,等等.
Schema定义了类是如何安排的,它们遵循的规则,它们包含了什么,以及它们是如何关联在一起的.

CIM把管理区域分为物理域和逻辑域,分别表示管理环境的物理和元素.
        逻辑域可进一步分出如下子域:
                *系统域:与计算机,应用程序和网络系统(操作系统,设备和进程等)有关.
                *设备域:包含一些部件,以对系统域中的对象(存储,进程等)提供支持.
                *应用程序域:紧紧地围绕着应用程序的生命周期,从它们的安装到更新,再到重新安装.
                *网络域:代表协议,网络访问,拓扑和连接.
CIM分为两层:核心层和普通层.
        核心层是最抽象的,因为它与域和平台无关.
        普通层处理特定的域,它与任何平台无关.


2.1.2 WMI类

Windows管理设备是WBEM的微软实现.
它的设计也反应了CIM Schema,而且它的很多类是从CIM(继承它们的属性和方法的模型)派生出来的.
然后WMI Schema也包含与WMI有关的类,而且是可扩展的(通过允许附加的类定义).\
第三方开发商可以开发新类(从WMI模型中派生)以描述管理环境的部件,而在原始的WMI规定中是没有包括这些类的.

(类之间的关系是通过联合定义的,它们也是作为类实现的.)
 
2.1.3 WMI名称空间
WMI引入了名字空间的概念,用于对相同环境中存在的类进行分组.此外,名字空间也用于加强安全限制.
当连接到一个名字空间时分检查用户的安全证书,它们决定了名字空间级别的权限.
和类相似,名字空间构成了一个层次结构,类似于文件系统中文件夹的层次结构.

WMI创建了下面的名字空间:
        *root:作为所有其他名字空间的占位符,它只包含WMI系统类,这些类与WMI有关,也在所有的其他名字空间中出现.
        *root\Default:与Windows注册表操纵有关的主机类.
        *root\Security:用于与Windows安全有关的类.
        *root\CIM V2:包含从CIM Schema派生的类,它们代表着我们最常工作的Win32环境.

 
2.2 WMI结构
2.2.1 WMI结构组件
        WMI结构包括一个客户端(管理应用程序),一个中介程序(作为CIM对象管理器实现),静态(DIM存储库)和动态(提供程序)数据源\
        和存储在不同层的被管理部件.
        WMI结构图:

第2章 WMI基础 - glasses0-0 - glasses0-0 的博客
        *管理应用程序从相对简单脚本变化到复杂的管理程序.它们负责处理被管理的环境信息.
        *CIM对象管理器是一个COM对象,用于处理管理数据和管理应用程序的静态和动态资料.
        *CIM存储库用作静态管理数据(类,实例和属性)的中央存储库.
        *WMI提供程序是一些COM对象,它们直接与被管理的部件(比如Win32系统,注册表,目录服务,性能数据,事件日志,SNMP等)交互.
            它们的信息是动态生成的.这些信息包含了来自管理应用程序请求的响应或被管理环境中变更的通知,\
            境中的客户应用程序是需要注册的.
        *被管理部件表示着被管理环境中的逻辑和物理对象.
        
        CIM对象部件是结构的中心部件,控制着信息流程.这样一来,管理应用程序不需要关心数据的来源.
        同样,提供程序完全能够把响应传递到客户请求,以及把事件通知传递到CIM对象管理器,而不必关心数据的最终目的地.
                
2.2.2 通信流程

信息流程依赖于进程的始发者.这可以是发送某个数据请求的管理应用程序,或者这是针对管理环境中变更的提供程序,\
或者是对CIM存储库中变更做出反应的CIM对象管理.在后两种情形中,会生成事件通知.
        
        1.响应管理应用程序请求.
          提供程序生成的数据可以存储在CIM存储库(静态)或对来自CIM对象管理器的请求做出响应时,进行传递(动态).
        
          数据的获取一般包括如下步骤:
          1)管理应用程序发送请求给CIM对象管理器.
          2)CIM对象管理器确定被请求的数据是静态的,还是动态的.
          3)如果数据是静态的,那么CIM对象管理器就直接从存储库获取数据.
            如果数据是动态的,那么CIM(OM??)根据提供程序注册信息把请求引向恰当的提供程序.
          4)提供程序提取数据并把它发回到CIM对象管理器.然后CIM对象管理器把它发送到原始请求数据的应用程序中.
        
        2.事件处理
          事件表现(表征??)了被管理环境或CIM存储库中的变更.除了前面列出的WMI结构部件,事件处理也包含如下过程:
                *事件过滤器:一组条件,用于确定用户(一种客户应用程序)感兴趣的事件类型(这是它们想要得到通知的东西).
                *用户和过滤器之间的绑定:为了收到有关一个事件的通知,每个用户需要一个订购过程,\
                 这会在二者之间创建一个绑定.
                *提供程序的注册信息:安装时,提供程序使用CIM对象管理器进行注册.这些信息用于创建它们的通信.
          事件处理一般包括下面的一些步骤:
          1)一个提供程序或CIM对象管理器分别监控着被管理环境或CIM存储库中的变更.
            如果提供程序侦测到变更,变更的指示就发送到CIM对象管理器.
          2)CIM对象管理器匹配现存事件过滤器(外)的事件列表.
          3)如果事件过滤器产生肯定的结果,CIM对象管理器就检查绑定,找出需要通报事件的用户.
          4)CIM对象管理器发送事件通知到适当的用户.
          5)用户根据某些预定义的动作处理通知.
          
2.3 CIM存储库

CIM存储库存储了WMI结构的静态部件,包括:类,实例和它们的属性
1.WMI对象路径
  WMI对象路径用于在一个CIM存储库中定位类或它的实例.
  
  对象路径的第一个元素是目标计算机的名字,前面附加两个反斜杠;后面跟上名字空间路径,名字空间通过单反斜框分开.
  通常类名追加到名字空间路径,并在前面缀有一个冒号.
  示例:
  引导本地系统root\CIM V2名字空间中指向Win32_Service类的WMI对象路径是
  
[url=file://\\.\root\CIMV2:Win32_Service]\\.\root\CIMV2:Win32_Service[/url]
  *WMI名字要求区分大小写
  为了访问类的特定实例,需要指定这个实例的键属性值.这个值(封闭在引号中)跟上类名,单句号,键属性名和等号.
  示例:
  为了访问WMITest1计算机上的工作站服务实例,引导实例的对象路径是:
  
[url=file://\\WMITest1\root\CIMV2:Win32_Service.Name='LanmanWorkstation']\\WMITest1\root\CIMV2:Win32_Service.Name='LanmanWorkstation'[/url]
  
  当确定由WMI脚本连接创建的一个对象路径时,下面的因素起了作用:
  *如果省略目标服务器名,就假定是本地机器.
  *如果省略名字空间,就假定是默认的名字空间.一般这是root\CIMV2,但只是派生自下面的注册表位置:
        HKEY_LOCAL_MACHINE\Software\microsoft\WBEM\Scripting\Default Namespace
  *当指定一个类或实例,名字空间不能省略. 

 
2.WMI查询语言
  WMI查询语言(WQL)提供了一种精确的方法,以便在WMI名字空间中选择特定的部件.
  WQL是ANSI SQL的一个子集.WQL引入了它引入了它的次要区别,以适应WM泊特定特性.
  WQL针对CIM存储库对查询进行公式化.它只能用于数据提取,\
     不像数据库管理系统中使用SQL;不能用WQL来修改,删除或创建类或实例.
  
  (1)数据,事件和Schema查询
     WMI支持三种查询:
     *数据查询——用于获取类实例:
     
      SELECT Property_1, Property_2, Property_3 FROM MyClass
      返回特定类的所有实例,包括各自的请求属性集.
      例:
      SELECT Name, Path FROM Win32_Share
      (列出目标计算机上所有共享的Name和Path属性-只要连接到它的root\CIM V2名字空间.)
      SELECT * FROM MyClass
      (返回MyClass类的每个实例的所有属性.)
      
      WHERE子句用于限制返回结果的范围.
      SELECT Path FROM Win32_Share WHERE Name = "ADMIN$"
      (给出WINDOWS安装目录的路径[在Windows NT/2000系统上])
    
    *事件查询——用于过滤出一个特定事件通知的属性.
    
     SELECT Property_1, Property_2, Property_3 FROM MyEvertClass
     (返回MyEventClass事件类的每个实例的3个属性)
     
     每个查询允许添加一些附加的操作符:
      WITHIN——指定轮询(确定WMI轮询监控事件的频率)或分组间隔(确定WMI收集类似事件的初始事件后的时间).
                间隔是一个整数值,表示着秒的数量.
      GROUP ——分组相同的事件,并为所有的它们生成单独的通知.
         
         [由于轮询处理具备的资源特性,所以推荐把WITHIN子句中的轮询间隔设为相对高的值(大于300秒).]
      
    *Schema查询——获取类定义,使用的基本语法的形式与其他类型的查询一样:
       SELECT * FROM MyClass
  
  ?????????????????????????????????????????????????????????????????????????????????
  (2)查询的连接和引用
     除ANSI SQL元素外,WQL在数据和Schema查询中支持ASSOCIATORS OF和REFERENCES OF语句.  
     
      在数据查询中,ASSOCIATORS OF语句用于获取与指定的实例有关的所有其他实例.
      在Schema查询中,ASSOCIATORS OF获取了与指定类有关的所有其它类.返回值称为端点.(EndPoint)
      
      ASSOCIATORS OF {Win32_Service.Name="Browser"}
      (返回Win32_ComputerSystem的一个实例[对应于root\CIM V2名字空间所连接的系统])和\
      Win32_Service的两个实例:Lanmanworkstation和lanmanserver(对应于这个系统的工作站和服务器)
      
      ASSOCIATORS OF {Win32_Service.Name="ProtectedStorage"}
      (返回Win32_ComputerSystem的一个单独实例和Win32_Service的4个实例:\
      在安装了这些部件的服务器上,则有CertSvc[证书服务],IISADMIN[IIS管理服务],MSMQ[消息队列]和RPC[远程过程调用])
     
       (ASSCIATORS OF可以包括WHERE子句.)
      
      REFERENCES OF弥补了ASSOCIATORS OF.
      对于一个特定的对象,后者找出连接到它的所有其他对象;前者列出这些联合.
      
       REFERENCES OF {Win32_Service.Name="Browser"}
        (返回Win32_SystemServices联合的一个单独实例和Win32_DependentServcie联合的二个实例[取决于安装部件])
       
       REFERENCES OF {Win32_Service.Name="ProtectedStorage"}
        (返回Win32_SystemServices关联的一个实例,并返回Win32_DependentService关联的多个实例[同样取决于安装的组件])
  ???????????????????????????????????????????????????????????????????????????????????????????????????
        
  (3)换码字符 '\'
     当查询字串中包含一个对象路径或带双引号或反斜杠字符的属性,需要使用转码字符.   

posted @ 2012-07-30 09:56  ajiaju  阅读(695)  评论(0编辑  收藏  举报