BcSaaS/Remove-BcEnvironment.ps1

<#
 .Synopsis
  Function for removing a Business Central online environment
 .Description
  Function for removing a Business Central online environment
  This function is a wrapper for https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/administration/administration-center-api#delete-environment
 .Parameter bcAuthContext
  Authorization Context created by New-BcAuthContext.
 .Parameter applicationFamily
  Application Family in which the environment is located. Default is BusinessCentral.
 .Parameter environment
  Name of the environment to delete
 .Parameter doNotWait
  Include this switch if you don't want to wait for completion of the deletion
 .Example
  $authContext = New-BcAuthContext -includeDeviceLogin
  Remove-BcEnvironment -bcAuthContext $authContext -environment 'usSandbox'
#>

function Remove-BcEnvironment {
    Param(
        [Parameter(Mandatory=$true)]
        [Hashtable] $bcAuthContext,
        [string] $applicationFamily = "BusinessCentral",
        [Parameter(Mandatory=$true)]
        [string] $environment,
        [switch] $doNotWait
    )

$telemetryScope = InitTelemetryScope -name $MyInvocation.InvocationName -parameterValues $PSBoundParameters -includeParameters @()
try {

    $bcAuthContext = Renew-BcAuthContext -bcAuthContext $bcAuthContext
    $bcEnvironment = Get-BcEnvironments -bcAuthContext $bcAuthContext | Where-Object { $_.name -eq $environment }
    if (!($bcEnvironment)) {
        throw "No environment named $environment exists"
    }
    if ($bcEnvironment.type -eq "Production") {
        throw "The BcContainerHelper Remove-BcEnvironment function cannot be used to remove Production environments"
    }
    else {
    
        $bearerAuthValue = "Bearer $($bcAuthContext.AccessToken)"
        $headers = @{
            "Authorization" = $bearerAuthValue
        }
        Write-Host "Submitting environment removal request for $applicationFamily/$environment"
        try {
            Invoke-RestMethod -Method DELETE -Uri "https://api.businesscentral.dynamics.com/admin/v2.3/applications/$applicationFamily/environments/$environment" -Headers $headers
        }
        catch {
            throw (GetExtenedErrorMessage $_.Exception)
        }
        Write-Host "Environment removal request submitted"
        if (!$doNotWait) {
            Write-Host -NoNewline "Removing."
            do {
                Start-Sleep -Seconds 2
                Write-Host -NoNewline "."
                $env = Get-BcEnvironments -bcAuthContext $bcAuthContext | Where-Object { $_.name -eq $environment }
            } while ($env -and $env.Status -eq "Removing")
            if ($env) {
                Write-Host -ForegroundColor Red $env.Status
                throw "Could not remove environment"
            }
            else {
                Write-Host -ForegroundColor Green "Removed"
            }
        }
    }
}
catch {
    TrackException -telemetryScope $telemetryScope -errorRecord $_
    throw
}
finally {
    TrackTrace -telemetryScope $telemetryScope
}
}
Export-ModuleMember -Function Remove-BcEnvironment