我正在创建一个自定义WMI类,以与SCCM的设备集合成员资格查询规则一起使用,以向SCCM公开一些组织特定的信息以进行集合创建。我设法在下面的MOF文件中添加了一个新类,它按预期显示在GUI中,并带有所需的显示名称。
我认为我唯一要解决的问题是如何使生成的查询按预期工作。我知道默认情况下WQL不支持联接。但是,Microsoft似乎经常在这些查询中使用它们,并且我已验证它们在应用程序外部按预期运行。我需要创建某种加入类来完成这项工作吗?是否有一些属性可以将属性指定为原键?
我在Windows Dev Center网站上搜索了System Center Configuration Manager SDK文档和WMI参考,花了几个小时而没有运气,非常感谢任何有用的输入。
MOF文件:
#pragma namespace ("\\\\.\\root\\sms\\site_lab")
[DisplayName("CMDB CI Computer")]
class SMS_G_System_MTS_cmdb_ci_computer : SMS_G_System
{
[key] uint32 ResourceID;
string asset_tag;
string dv_company;
string dv_cost_center;
string dv_location;
};
SCCM生成的查询:
select * from SMS_R_System inner join SMS_G_System_MTS_cmdb_ci_computer on SMS_G_System_MTS_cmdb_ci_computer.ResourceID = SMS_R_System.ResourceId
我正在Powershell中使用Get-CimInstance命令测试这些命令,并得到以下结果
Powershell:
此命令按预期返回联接的对象。
Get-CimInstance -Namespace 'root\sms\site_lab' -Query 'select SMS_G_System_PROCESSOR.Architecture from SMS_R_System inner join SMS_G_System_PROCESSOR on SMS_G_System_PROCESSOR.ResourceId = SMS_R_System.ResourceId'
此命令将引发“无效查询”错误。
Get-CimInstance -Namespace 'root\sms\site_lab' -Query 'select asset_tag from SMS_R_System inner join SMS_G_System_MTS_cmdb_ci_computer on SMS_G_System_MTS_cmdb_ci_computer.ResourceID = SMS_R_System.ResourceId'