CM: Функция добавления кода выхода к типу развертывания
26.06.2020 Оставьте комментарий
Итак, появилась очередная задача — приложение при замене возвращает код, который клиент Configuration Manager не ожидает. В частности, браузер Яндекс возвращает код 3 при обновлении. Чтобы автоматизировать процесс выкладки приложения был написан большой скрипт, который проверяет наличие нового дистрибутива и публикует его в Configuration Manager. При его написании использовались стандартные командлеты. К сожалению, среди них не оказалось командлетов, которые могли бы добавить необходимый код выхода к требуемому типу развертывания. Ниже приведен код функции, которая решает данную проблему:
function Add-CMDeploymentTypeReturnCode
{
param(
[Parameter(
Mandatory = $true,
Position = 0,
ValueFromPipeline = $true)]
[Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlResultObject[]]$DeploymentType,
[Parameter(
Mandatory = $true,
Position = 1)]
[int]$Value,
[Parameter(
Mandatory = $true,
Position = 2)]
[Microsoft.ConfigurationManagement.ApplicationManagement.ExitCodeClass]$CodeType,
[Parameter(
Mandatory = $false,
Position = 3)]
[string]$Name = $null,
[Parameter(
Mandatory = $false,
Position = 4)]
[string]$Description = $null
)
begin
{
$ExitCode = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.ExitCode
$ExitCode.Code = $Value
$ExitCode.Class = $CodeType
if (![string]::IsNullOrEmpty($Name))
{
$ExitCode.Name = $Name
}
if (![string]::IsNullOrEmpty($Description))
{
$ExitCode.Description = $Description
}
}
process
{
foreach ($Type in $DeploymentType)
{
$Application = Get-CMApplication -ModelName $Type.AppModelName
$UniqueID = $Type.CI_UniqueID
$ObjectId = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.ObjectId($UniqueID.Split("/"))
$SDMPackage = [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::DeserializeFromString($Application.SDMPackageXML)
$SDMPackage.DeploymentTypes[$ObjectId].Installer.ExitCodes.Add($ExitCode)
$Application.SDMPackageXML = [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::Serialize($SDMPackage, $false)
$Application.Put()
}
}
}
Пример использования функции:
Get-CMApplication -Name "Yandex Browser" | Get-CMDeploymentType | Add-CMDeploymentTypeReturnCode -Value 3 -CodeType Success -Name "Update" -Description "Update"