none
使用MOF来扩展hardware inventory - 静态数据 RRS feed

  • 常规讨论


  • MOF (管理对象格式)是WBEM工业标准的一部分,微软的WBEM实现就是WMI。 MOF定义了文本文件如何描述计算机管理信息,对象如何定义计算机管理信息以及相关的结构。 hinv client agent 缺省从 WMI的CIMV2名称空间中提取数据,这个agent并不提取CIMV2的所有数据,而只提取WMI的CCM\policy\machine\actualConfig 名称空间中的hinv rule中指定的信息。客户端将这些规则存储在InventoryDataItem类中。hinv rule在 SMS_def.mof中定义, 这个文件的信息会被转换为policy发送给客户端。CIMV2 中的类实例叫数据类,它们包括了hinv agent收集的数据。CCM\policy\machine\actualConfig 中的类实例叫报告类,它包括了hinv agent实际会收集并report给 server的数据。

    Hinv agent扫描 CIMV2\SMS 来查找找被标记为report的类,然后到CIMV2中去找这些类,WMI provider会提供这些类的实例的数据。如果没有用provider来收集数据,数据通常是被静态定义为类的实例,静态实例可以通过脚本,程序,或者编译MOF文件来修改。Hinv agent会对比从 CIMV2\SMS\delta 中的数据和收集到的数据来确定数据是否发生了更改,以及是否应该report。如果full inventory或者有一个重新同步要求,所有收集到的数据都被report

     使用MOF来存储静态数据,首先必须要定义数据类和数据实例

    #pragma namespace ("\\\\.\\root\\CIMv2")

    class UserInfo

    {

    [key]

    string user;

    string office;

    string phone_number;

    };

     

    instance of UserInfo  --------下面是定义数据实例,必须和类名相同

    {

    user = "Frank Guan 1";

    office = "People Square build 1";

    phone_number = "021-87654321";

    };

     

    instance of UserInfo

    {

    user = "Frank Guan 2";

    office = "People Square build 2";

    phone_number = "021-12345678";

    };

    编辑完成后,存储为xxx.mof文件,然后使用 mofcomp.exe xxx.mof 编译即可将以上信息加入到WMI中,使用wbemtest或者CIMStudio等工具检查和验证。系统要收集这些信息,需要在CIMV2\SMS中加入报告类名称和对应的数据结构,如下。 在SMS 2003中,将上下两段 MOF文件都加入 SMS_def.mof 中。在SCCM 2007 中将上下两端分别加入 Configuration.mof (数据类和实例) 和 SMS_def.mof(报告类)就完成了对静态数据MOF扩展的收集。 SCCM 2007 和 SMS 2003 在MOF的处理上只是小改进,并无大的不同,我会另发一贴特别说明

     

    #pragma namespace ("\\\\.\\root\\CIMv2\\sms")

    [ SMS_Report (TRUE),

    SMS_Group_Name ("UserInfo MOF")

    --- 这个是在DB中创建表和视图使用的名称: V_GS_UserInfo_MOF0 视图和 Userinfo_MOF_Data表

    SMS_Class_ID ("xxx|UserInfo|1.0")]

    --- 这个是WMI类使用的名称 SMS_G_System_xxx_userinfo_1_0

     

     

    class UserInfo : SMS_Class_Template  - 报告类 Userinfo 也应该和上面的数据类定义中的类名相同

    {

    [SMS_Report(TRUE), key]

    string user;

    [SMS_Report(TRUE)]

    string office;

    [SMS_Report(TRUE)]

    string phone_number;

    };

    然后做hinv,在客户端的inventoryagent.log中搜 Collection: ....FROM UserInfo 如果数据类和报告类名称不同,就会有collection: class xxxx does not exist out

    Server 端的Dataldr.log中搜 group Name : UserInfo MOF...  CSqlSchema::CreateProcedure 然后db中就有了 V_GS_UserInfo_MOF0 视图和 Userinfo_MOF_Data表

    2010年4月10日 12:58
    版主

全部回复

  • 感谢分享信息

    在这理问一下,SCCM在看到从客户端收集来的信息时,

    如何使列名 显示为本地语言,比如把上述列文中的列名”User“ 显示为 “用户”


    2013年3月1日 2:33