c#为SCCM 2012创建直接成员规则

问题描述:

我正在尝试构建一个C#应用程序,以提供我们的全球第一级支持团队使用的最常见的SCCM 2012功能。c#为SCCM 2012创建直接成员规则

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

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

添加到集合似乎通过WMI方法发生最可靠,并且我完全陷入了困境。我设法从我们的服务器接收到WMI数据,例如Bios Info或磁盘信息,但无法触发为成员资格规则创建新实例的方法。

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

找不到太多东西,但是如果您看看this example,还有第二部分以“添加到所有系统集合”注释开始。这基本解释了这一点。您需要使用此工具的是System Center Configuration Manager控制台的文件夹AdminUI.WQLQueryengine.dll和Microsoft.ConfigurationManagement.Managementprovider.dll中的两个dll。有了这些,你可以基本上编写代码,就像可以找到的许多WMI WBS示例一样。这将是这个样子:

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); 
} 

伊莫这应该也基本上是可行的“标准” WMI通话,而这些dll的帮助,但因为这是它是如何在MS的例子做我总是假设某种的优势,并通过这种方式做到了。

+0

谢谢你这个快速而真正有用的提示:-) – christiang79