Public/Remove-DuneResourceProvider.ps1

<#
.SYNOPSIS
Remove a resource provider.

.DESCRIPTION
Deletes a `DuneResourceProvider` identified by `Name`, `Id`, or a pipeline-provided `DuneResourceProvider` object. Use `-IncludeChildren` to remove associated resource groups before deleting the provider.

.PARAMETER Name
The name of the resource provider to remove (Name parameter set).

.PARAMETER Id
The GUID Id of the resource provider to remove (Id parameter set).

.PARAMETER ResourceProvider
A `DuneResourceProvider` object supplied via pipeline.

.PARAMETER IncludeChildren
When specified, removes resource groups under the provider before deleting the provider.

.EXAMPLE
PS> Remove-DuneResourceProvider -Name "acme-provider" -IncludeChildren
Prompts and removes the named resource provider and its resource groups.

.EXAMPLE
PS> Get-DuneResourceProvider -Id 3d8f6b5a-... | Remove-DuneResourceProvider
Pipeline example removing a resource provider object.
#>

function Remove-DuneResourceProvider {
    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'High',
        DefaultParameterSetName = 'Id'
    )]
    param (
        [Parameter(Mandatory, ParameterSetName = "Name", Position = 0)]
        [string]$Name,

        [Parameter(Mandatory, ParameterSetName = "Id")]
        [guid]$Id,

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

        [Parameter()]
        [switch]$IncludeChildren
    )

    begin {
        Write-Debug "$($MyInvocation.MyCommand)|begin"
        $Uri = "resourceproviders"
    }

    process {
        Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)"
        switch ($PSCmdlet.ParameterSetName) {
            'Name' {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($Name)"
                $ResourceProvider = Get-DuneResourceProvider -Name $Name
            }
            'Id' {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($Id)"
                $ResourceProvider = Get-DuneResourceProvider -Id $Id
            }
            'ResourceProvider' {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($ResourceProvider.Id)"
            }
            Default {
                return
            }
        }
        $Url = $("{0}/{1}" -f $Uri, $ResourceProvider.Id)
        if ($PSCmdlet.ShouldProcess($ResourceProvider.Name)) {
            if ($IncludeChildren) {
                $ResourceProvider | Get-DuneResourceGroup | Remove-DuneResourceGroup -IncludeChildren
            }
            $Null = Invoke-DuneApiRequest $Url -Method DELETE
        }
    }

    end {
        Write-Debug "$($MyInvocation.MyCommand)|end"
    }
}