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% 确定这一点。
我正在使用 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% 确定这一点。