Я пытаюсь обновить классы SCCM SMS_TaskSequence_Action в WMI, используя C #. Я могу полностью перечислить классы SMS_TaskSequence_Step; но я не могу изменить и / или «обновить» WMI так, как я ожидал.
Я использую консольное приложение .NET 4.7.2, включая ссылки на специфичные для AMD64 библиотеки "adminui.wqlqueryengine.dll" и "microsoft.configurationmanagement.managementprovider.dll".
Я ожидал, что смогу использовать IResultObject.Get () и .Put (), но они выдают «System.NotImplementedException». Я могу использовать SetArrayItems () для объекта ts (последовательность задач), но изменения, похоже, не применяются.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ConfigurationManagement.ManagementProvider;
using Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine;
namespace SCCM
{
class Program
{
static Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlConnectionManager wqlcm;
static void Main(string[] args)
{
wqlcm = new WqlConnectionManager();
wqlcm.Connect("ServerName");
IResultObject taskSequencePackages = wqlcm.QueryProcessor.ExecuteQuery("select * from SMS_TaskSequencePackage");
foreach (IResultObject tsp in taskSequencePackages)
{
tsp.Get();
//tsp["Name"].StringValue = "Setting a custom Task Sequence Package Name";
//tsp.Put();
Console.WriteLine("Task Sequence Name: " + tsp["Name"].StringValue);
Console.WriteLine("Sequence: " + tsp["Sequence"].StringValue);
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("TaskSequencePackage", tsp);
IResultObject sequence = wqlcm.ExecuteMethod("SMS_TaskSequencePackage", "GetSequence", parameters);
IResultObject ts = sequence.GetSingleItem("TaskSequence");
// Get a list of steps.
List<IResultObject> actionSteps = ts.GetArrayItems("Steps");
// Find the action to be deleted.
foreach (IResultObject actionStep in actionSteps)
{
if (actionStep["__CLASS"].StringValue == "MyCustomTaskSequenceAction" && actionStep["__SUPERCLASS"].StringValue == "SMS_TaskSequence_Action")
{
// Throws a "System.NotImplementedException": The method or operation is not implemented.
//actionStep.Get();
actionStep["CommandLine"].StringValue = "Some New Command Line";
ts.SetArrayItems("Steps", actionSteps);
break;
}
}
}
}
}
}
Мне также известно, что класс SMS_TaskSequencePackage содержит одну SMS_TaskSequence, и из нее я могу получить классы SMS_TaskSequence_Step, которые составляют последовательность задач. Я также знаю, что мне нужно будет рекурсивно перечислять шаги (следуя SDK), потому что Step может быть SMS_TaskSequence_Action или любым количеством вложенных объектов SMS_TaskSequence_Group.
Предполагая, что я повторю все этапы, как можно внести изменения в конкретные классы SMS_TaskSequence_Action, которые они хотят изменить, и применить их правильно? Использование .Get () и .Put () работает с объектом tsp, но я не могу понять, как обновить шаги.