Недопустимые параметры метода при попытке вызвать RequestRefresh с C # на сервер SCCM

#c# #wmi #sccm

#c# #wmi #sccm

Вопрос:

Я пытаюсь вызвать функцию RequestRefresh для SMS_Collection каждый раз, когда новое устройство добавляется в SCCM через наше приложение. Однако, когда я вызываю execute, я получаю следующее исключение.

 Main: Unrecoverable Service Error.|System.Management.ManagementException Invalid method Parameter(s)
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options)
at SccmProxy.Adapter.RefreshCollection(String collectionName) in c:wsdevelopmentSCCMAgentMainSccmProxySccmProxyAdapter.cs:line 733
at SccmProxy.TestHelper.ExecuteTest(ProxyConfiguration config) in c:wsdevelopmentSCCMAgentMainSccmProxySccmProxyTestHelper.cs:line 144
at SccmProxy.Service.Main() in c:wsdevelopmentSCCMAgentMainSccmProxySccmProxyService.cs:line 134 Void ThrowWithExtendedInfo(System.Management.ManagementStatus)
 

Вот код

 ManagementPath pathMethod = new ManagementPath("SMS_Collection");
using (ManagementClass processClass = new ManagementClass(this.Configuration.NewTargetScope, pathMethod, null))
{
   ManagementBaseObject inParams = processClass.GetMethodParameters("RequestRefresh");

   using (ManagementBaseObject outParams = processClass.InvokeMethod("RequestRefresh", inParams, null))
   {
       LOGGER.Info(MethodBase.GetCurrentMethod().Name, "Successful collection refresh: {0}", outParams["ReturnValue"]);
   }
 }
 

Проблема в том, что когда я вызываю GetMethod parameters, он возвращает объект с параметром «includesubcollections», который действителен для SCCM 2007, но я использую SCCM 2012, и метод RequestRefresh больше не использует этот параметр. Как получается, что GetMethod возвращает старый параметр функции, когда он указывает на новый экземпляр SCCM 2012 года?

Ответ №1:

Я не смог заставить приведенный выше код работать, но смог вызвать RequestRefresh через Wql, используя этот пример из http://msdn.microsoft.com/en-us/library/hh949402.aspx

 public void RefreshCollection(WqlConnectionManager connection, string collectionID)
{
   IResultObject collection = connection.GetInstance(string.Format("SMS_Collection.CollectionID='{0}'", collectionID));
   collection.ExecuteMethod("RequestRefresh", null);
}