Public/Set-DuneDeploymentTemplate.ps1

function Set-DuneDeploymentTemplate {
    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'None',
        DefaultParameterSetName = "Id"
    )]
    param (
        [Parameter(Mandatory, ParameterSetName = "Id")]
        [guid]$Id,

        [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = "Object")]
        [DuneDeploymentTemplate]$DeploymentTemplate,

        # [Parameter()]
        # [string]$DisplayName,

        # [Parameter()]
        # [Environments]$DefaultEnvironment,

        [Parameter()]
        [Environments[]]$AllowedEnvironments,

        [Parameter()]
        [string[]]$AllowedResourceProviderIds = @(),

        [Parameter()]
        [bool]$IsDisabled,

        [Parameter()]
        [string]$TxId
    )

    begin {}

    process {
        Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)"
        if ($PSCmdlet.ParameterSetName -eq "Id") {
            $DeploymentTemplate = Get-DuneDeploymentTemplate -Id $DeploymentTemplate.Id
        }
        $PropertyUpdates = @()
        $ModifiedProperties = $PSBoundParameters.Keys | Where-Object { $_ -notin "Id","DeploymentTemplate" }
        if (-not $ModifiedProperties) {
            return
        }
        foreach ($Item in $ModifiedProperties) {
            if ($Item -eq 'DefaultEnvironment') { $PSBoundParameters.$Item = $PSBoundParameters.$Item.ToString() }
            if ($Item -eq 'AllowedResourceProviderIds') { $DeploymentTemplate | Add-Member -MemberType NoteProperty -Name AllowedResourceProviderIds -Value @(($DeploymentTemplate.AllowedResourceProviders).Id) }
            if ( ($DeploymentTemplate | Get-Member -MemberType *Property).Name -contains $Item -and ($PSBoundParameters.$Item -ne $DeploymentTemplate.$Item -or $Item -eq 'AllowedResourceProviderIds') ) {
                $DeploymentTemplate.$Item = $PSBoundParameters.$Item
                $PropertyUpdates += $PSBoundParameters.$Item
            }
        }
        if ($PropertyUpdates) {
            $Body = ConvertTo-Hashtable $DeploymentTemplate
            $Uri = 'deploymenttemplates/{0}' -f $DeploymentTemplate.Id
            if ($PSCmdlet.ShouldProcess($($PropertyUpdates | ConvertTo-Json -Depth 16 -Compress))) {
                $Null = Invoke-DuneApiRequest -Uri $Uri -Method PUT -Body $Body
            }
        }
    }

    end {}
}