CM: Функция добавления кода выхода к типу развертывания

Итак, появилась очередная задача — приложение при замене возвращает код, который клиент 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"