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的例子做我总是假设某种的优势,并通过这种方式做到了。
谢谢你这个快速而真正有用的提示:-) – christiang79