Public/Set-DuneResourceProvider.ps1

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

        [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = "Object")]
        [DuneResourceProvider]$ResourceProvider,

        [Parameter()]
        [string]$DisplayName,

        [Parameter()]
        [string]$Description,

        [Parameter()]
        [Environments]$DefaultEnvironment,

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

    begin {}

    process {
        Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)"
        if ($PSCmdlet.ParameterSetName -eq "Id") {
            $ResourceProvider = Get-DuneResourceProvider -Id $ResourceProvider.Id
        }
        $PropertyUpdates = @()
        $ModifiedProperties = $PSBoundParameters.Keys | Where-Object { $_ -ne "ResourceProvider" }
        if (-not $ModifiedProperties) {
            return
        }
        foreach ($Item in $ModifiedProperties) {
            if ($Item -eq 'DefaultEnvironment') {
                $PSBoundParameters.$Item = $PSBoundParameters.$Item.ToString()
            }
            if (
                ($ResourceProvider | Get-Member -MemberType Property).Name -contains $Item -and
                $PSBoundParameters.$Item -ne $ResourceProvider.$Item
            ) {
                $ResourceProvider.$Item = $PSBoundParameters.$Item
                $PropertyUpdates += $PSBoundParameters.$Item
            }
        }
        if ($PropertyUpdates.Count -gt 0) {
            $Body = ConvertTo-Hashtable $ResourceProvider
            $Uri = 'resourceproviders/{0}' -f $ResourceProvider.Id
            if ($PSCmdlet.ShouldProcess($($PropertyUpdates | ConvertTo-Json -Depth 16 -Compress))) {
                $Null = Invoke-DuneApiRequest -Uri $Uri -Method PUT -Body $Body
            }
        }
    }

    end {}
}