c# 使用 SCCM SDK 部署包

c# Deploy package using SCCM SDK

我正在使用 SCCM SDK 并使用以下 C# 代码创建部署:

public string DeployPrograma(WqlConnectionManager connection, string collectionID, string pacote, string nomePrograma)
        {
            string idDeploy = "";

            const Int32 OVERRIED_SERVICE_WINDOWS = 0x00100020;
            const Int32 ENABLE_PRESENT = 0x01000000;
            const Int32 REMOTE_FLAG = 0x00041040;

            try
            {
                Console.WriteLine("Iniciando a criação do Deploy...");

                DateTime now = DateTime.Now;

                IResultObject novoDeploy = connection.CreateInstance("SMS_Advertisement");

                  novoDeploy["CollectionID"].StringValue = collectionID;
                  novoDeploy["PackageID"].StringValue = pacote;
                  novoDeploy["ProgramName"].StringValue = nomePrograma;
                  novoDeploy["AdvertisementName"].StringValue = "Deploy Teste SDK";
                  novoDeploy["Comment"].StringValue = "Deploy realizado via SDK";
                  novoDeploy["AdvertFlags"].IntegerValue = novoDeploy["AdvertFlags"].IntegerValue | OVERRIED_SERVICE_WINDOWS;
                  novoDeploy["DeviceFlags"].IntegerValue = 0;//novoDeploy["DeviceFlags"].IntegerValue | ENABLE_PRESENT;
                  novoDeploy["RemoteClientFlags"].IntegerValue = 41040;//novoDeploy["RemoteClientFlags"].IntegerValue | REMOTE_FLAG;
                  novoDeploy["AssignedScheduleEnabled"].BooleanValue = true;
                  novoDeploy["SourceSite"].StringValue = "TST";
                  novoDeploy["OfferType"].IntegerValue = 0;
                  novoDeploy["PresentTimeEnabled"].BooleanValue = true;
                  novoDeploy["PresentTime"].DateTimeValue = now;
                  novoDeploy["Priority"].IntegerValue = 1;
                  //novoDeploy["ExpirationTime"].DateTimeValue = now.AddDays(1);
                  //novoDeploy["ExpirationTimeEnabled"].BooleanValue = true;
                  novoDeploy["TimeFlags"].IntegerValue = 8211;//novoDeploy["TimeFlags"].IntegerValue | ENABLE_PRESENT;

                  novoDeploy.Put();

                  Console.WriteLine("Deploy realizado: " + novoDeploy["AdvertisementName"].StringValue);

                  novoDeploy.Get(); 

                  idDeploy = novoDeploy["AdvertisementID"].StringValue;
            }
            catch (SmsException ex)
            {
                Console.WriteLine("Falha ao realizar o Deploy: " + ex.Message);
            }

            return idDeploy;
        }

部署出现在部署列表中,但是没有发布到客户端。

如果我通过 SCCM 控制台执行相同的过程,部署就会成功。

有没有人遇到过类似的问题?

谢谢

我认为您缺少的是分配,即应该在哪个时间点部署它。可以这样添加:

List<IResultObject> collectionSchedule = novoDeploy.GetArrayItems("AssignedSchedule");
IResultObject collectionVariable = connection.CreateEmbeddedObjectInstance("SMS_ST_NonRecurring");
collectionVariable["StartTime"].DateTimeValue = dtpAssignSchedule.Value;
collectionSchedule.Add(collectionVariable);
novoDeploy.SetArrayItems("AssignedSchedule", collectionSchedule);

如果我对 WMI 类 的理解正确,那么您需要它,因为您将 AssignedScheduleEnabled 设置为 true。也许如果你将它设置为 false 它也可以工作(通过切换到“尽快”)但我不是 100% 确定这一点。