C# 为 SCCM 2012 创建直接成员身份规则

本文关键字:成员 身份 规则 创建 SCCM 2012 | 更新日期: 2023-09-27 18:37:25

我正在尝试构建一个 C# 应用程序,提供我们全球第一级支持团队使用的最常见的 SCCM 2012 函数。

因此,最重要的功能之一是将计算机(资源 ID)作为 DirectMemberRule 添加到集合中。

我已经用Powershell做了类似的事情,还创建了一个GUI。但是由于多重威胁和GUI使"脚本"越来越不稳定,我想继续使用DotNet应用程序。不幸的是,我对 C# 一点经验都没有。虽然我已经可以设法从我们的SQL数据库中读取并收集已经的集合名称,集合的计算机等。

添加到集合似乎通过 WMI 方法最可靠,我完全卡在那里。我设法从我们的服务器接收 WMI 数据,如 BIOS 信息或磁盘信息,但无法触发为成员身份规则创建新实例的方法。

我很乐意在这里得到一些帮助。:-)

C# 为 SCCM 2012 创建直接成员身份规则

没有

太多可找的,但如果你看这个例子,第二部分从注释"添加到所有系统集合"开始。这基本上可以解释这一点。您需要的是系统中心配置管理器控制台,AdminUI.WQLQueryengine.dll和Microsoft.ConfigurationManagement.Managementprovider.dll文件夹中的两个dll。有了这些,您基本上可以编写几乎完全相同的代码,就像可以找到的许多 VBS WMI 示例一样。它看起来像这样:

using Microsoft.ConfigurationManagement.ManagementProvider;
using Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine;
 SmsNamedValuesDictionary namedValues = new SmsNamedValuesDictionary();
 using (WqlConnectionManager connection = new WqlConnectionManager(namedValues)) {
    connection.Connect("<site server>");
    IResultObject collection = connection.GetInstance("SMS_Collection.collectionId='<CollectionID>'");
    IResultObject collectionRule = connection.CreateEmbeddedObjectInstance("SMS_CollectionRuleDirect");
    collectionRule["ResourceClassName"].StringValue = "SMS_R_System";
    collectionRule["ResourceID"].IntegerValue = <ResourceID>;
    Dictionary<string, object> inParams = new Dictionary<string, object>();
    inParams.Add("collectionRule", collectionRule);
    collection.ExecuteMethod("AddMembershipRule", inParams);
}

Imo 这基本上也应该可以在没有这些 dll 帮助的情况下使用"普通"WMI 调用来实现,但由于这是在 MS 示例中完成的方式,我总是假设某种优势并以这种方式做到这一点。