2016-03-04 9 views
0

Я пытаюсь создать приложение C#, предлагающее наиболее распространенные функции SCCM 2012, используемые нашими командами поддержки 1-го уровня по всему миру.C# для создания правил прямого членства для SCCM 2012

Поэтому одной из наиболее важных функций является добавление компьютеров (resourceID) в коллекцию как DirectMembershipRule.

Я уже сделал подобные вещи с Powershell, а также создал графический интерфейс. Но поскольку multithreating и GUI делает «скрипт» все более и более неустойчивым, я хотел бы продолжить приложение DotNet. Несомненно, я вообще не испытываю на C#. Хотя я уже успел прочитать нашу базу данных SQL и собрать уже имена коллекций, компьютеры коллекции и другие.

Добавление в коллекцию кажется наиболее надежным с помощью метода WMI, и там я полностью застрял. Мне удалось получить данные WMI, такие как Bios Info или Disk info, с нашего сервера, но не смог вызвать методы создания нового экземпляра для правила Membership.

Я был бы очень рад получить помощь здесь. :-)

ответ

0

Существует не так много, но если вы посмотрите на this example, есть вторая часть, начинающаяся с комментария "Добавить в систему". Это в основном объясняет это. Для этого вам потребуется две DLL из папки консоли Configuration Center Configuration Manager, AdminUI.WQLQueryengine.dll и Microsoft.ConfigurationManagement.Managementprovider.dll. С ними вы можете писать код почти точно так же, как многие примеры WMI для VBS, которые можно найти. Это будет выглядеть примерно так:

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

 Смежные вопросы

  • Нет связанных вопросов^_^