使用MOF来扩展hardware inventory -- 动态数据

MOF扩展用于动态数据时和用于静态数据时很相似,除了一点:不包括数据本身(也就是数据类和数据类实例),而是由 WMI provider 从WMI中提取信息。报告类部分和处理静态数据时相同,同样的定义,加入SMS_def.mof

对于数据类部分:
1. 对于客户端,在SMS 2003中数据类部分(也在SMS_def.mof中)必须分发给所有client并编译,SCCM2007中,数据类定义(包括WMI provider)是在configuration.mof中,会自动被编译为policy发送给client,所以在客户端不需要做任何事情。如果使用了第三方的WMI provider,这个provider也需要分发。
2. 定义数据类
3. 扩展SMS_def.mof,为上面收集的数据来加入一个报告类

其它:

1. Provider 只需要定义一次. SMS 2003中是在 SMS_def.mof中,SCCM中是在 Configuration.mof中
2. 标准provider,例如WMI自带的registry provider不需要在SMS_def.mof 中再重新定义,里面已经有了

最常用的WMI provider是 registry provider,也就是提取注册表值,它是WMI自带的。registry provider又分为 property provider,instance provider,event provider 三类。 下面的例子是 SMS 2003 admin guide中的样例,使用了property provider,也就是提取某个特定的注册表键的实际值。

#pragma namespace(".//root//CIMv2")
// Registry property provider
instance of __Win32Provider as $PropProv
{
Name ="RegPropProv" ;
ClsID = "{72967901-68EC-11d0-B729-00AA0062CBB7}";
ImpersonationLevel = 1;
PerUserInitialization = "FALSE";
};
instance of __PropertyProviderRegistration
{
Provider =$PropProv;
SupportsPut =TRUE;
SupportsGet =TRUE;
};

----------------------------------------------以上部分是property provider的定义,不用再重新定义
[DYNPROPS]
class Power_Mgmt
{
[key]
string index = "current";
sint32 CurrentPowerPolicy;
};

--------------------------------------------- 以上部分是数据类的定义:电脑使用的power schema是什么样的。
[DYNPROPS]
instance of Power_Mgmt
{
[PropertyContext("local|HKEY_CURRENT_USER//Control
Panel//PowerCfg|CurrentPowerPolicy"),
Dynamic, Provider("RegPropProv")]
CurrentPowerPolicy;
};

---------------------------------------------以上部分是数据类实例的定义,也就是指定从注册表的什么位置来去这个值。

#pragma namespace (".//root//CIMv2//sms")
[ SMS_Report (TRUE),
SMS_Group_Name ("Power Management"),
SMS_Class_ID ("MICROSOFT|POWER_MGMT|1.0") ]
class Power_Mgmt : SMS_Class_Template
{
[SMS_Report(TRUE),key]
string index;
[SMS_Report(TRUE)]
sint32 CurrentPowerPolicy;
};    ------------------------------------  这部分是报告类

 

下面的例子也是 Admin guide中的样例,是使用 instance provider,是提取注册表的键本身的名称

#pragma namespace(".//root//CIMv2")
// Instance provider
instance of __Win32Provider as $InstProv
{
Name = "RegProv" ;
ClsId = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}" ;
};
instance of __InstanceProviderRegistration
{
Provider = $InstProv;
SupportsPut = TRUE;
SupportsGet = TRUE;
SupportsDelete = FALSE;
SupportsEnumeration = TRUE;
};

-----------------------------------------------以上是 instance provider的定义,系统已经有了,不需要添加
[dynamic, provider("RegProv"),
ClassContext("local|HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows
NT//CurrentVersion//Hotfix")
]

----------------------------------------------以上定义了数据类,也就是读取...hotfix 下这些KBxxxxx本身的名称
class HotFixes
{
[key]
string QNumber;
[PropertyContext("Installed")]
uint32 Installed;
};

---------------------------------------------以上定义了数据类实例的值。 “installed" 意思就是只要这个注册表位置出现了KBxxxxx就说明这个KB补丁已经安装了。

 

下面是报告类的定义

#pragma namespace(".//root//CIMv2//sms")
[SMS_Report(TRUE),
SMS_Group_Name("Hotfixes"),
SMS_Class_ID("MICROSOFT|HOTFIXES|1.0")]
class HotFixes : SMS_Class_Template
{
[SMS_Report(TRUE),key]
string QNumber;
[SMS_Report(TRUE)]
uint32 Installed;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值