Public/New-DuneResourceProvider.ps1

function New-DuneResourceProvider {
    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'None'
    )]
    param (
        [Parameter(Mandatory)]
        [string]$Name,

        [Parameter(Mandatory)]
        [string]$Type,

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

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

        [Parameter()]
        [string]$DisplayName,

        [Parameter()]
        [string]$Description,

        [Parameter()]
        [PSCustomObject[]]$Config,

        [Parameter()]
        [bool]$InitializeForDeployments = $true
    )

    begin {}

    process {
        Write-Debug "$($MyInvocation.MyCommand)|process"
        $Body = @{
            Name                     = $Name
            DisplayName              = $DisplayName
            Description              = $Description
            AllowedEnvironments      = $AllowedEnvironments | ConvertTo-EnumString
            Type                     = $Type
            Config                   = $Config
            InitializeForDeployments = $InitializeForDeployments
        }
        if ($PSBoundParameters.ContainsKey('DefaultEnvironment')) {
            $Body.DefaultEnvironment = $DefaultEnvironment.ToString()
        }
        if ($PSBoundParameters.ContainsKey('AllowedEnvironments')) {
            $Body.AllowedEnvironments = $AllowedEnvironments | ConvertTo-EnumString
        }
        if ($PSCmdlet.ShouldProcess($($Body | ConvertTo-Json -Depth 16 -Compress))) {
            $Return = Invoke-DuneApiRequest -Uri "resourceproviders" -Method POST -Body $Body
            $ReturnObject = if ($Return.Content) { $Return.Content | ConvertFrom-Json | ConvertTo-DuneClassObject -Class DuneResourceProvider }
            return $ReturnObject
        }
    }

    end {}
}