【问题标题】:c# to create direct membership rules for SCCM 2012c# 为 SCCM 2012 创建直接成员资格规则
【发布时间】:2016-03-04 11:06:37
【问题描述】:

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

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

我已经用 Powershell 做过类似的事情,还创建了一个 GUI。但由于多威胁和 GUI 使“脚本”越来越不稳定,我想继续使用 DotNet 应用程序。 不幸的是,我在 C# 方面完全没有经验。尽管我已经能够从我们的 SQL 数据库中读取数据并收集已收集的集合名称、集合的计算机等。

添加到集合似乎是通过 WMI 方法最可靠的发生,我完全被卡住了。我设法从我们的服务器接收 WMI 数据,例如 Bios Info 或 Disk info,但无法触发为成员规则创建新实例的方法。

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

【问题讨论】:

    标签: c# wmi sccm


    【解决方案1】:

    没有太多可找到的,但如果您查看this example,则有第二部分以“添加到所有系统集合”的注释开头。这基本上解释了这一点。为此,您需要使用 System Center Configuration Manager 控制台文件夹中的两个 dll,即 AdminUI.WQLQueryengine.dll 和 Microsoft.ConfigurationManagement.Managementprovider.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 示例中完成的方式,所以我总是假设某种优势并这样做。

    【讨论】:

    • 感谢您提供快速且非常有用的提示 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多