Public/Remove-DynDnsNode.ps1

function Remove-DynDnsNode {
    [CmdLetBinding(
        SupportsShouldProcess=$true,
        ConfirmImpact='High'
    )]
    param(
        [Parameter(Mandatory=$true)]
        [string]$Zone,
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Node,
        [switch]$Force
    )

    if (-Not (Test-DynDnsSession)) {
        return
    }

    if ($Node) {
        if ($Node -match $Zone ) {
            $Fqdn = $Node
        } else {
            $Fqdn = $Node + '.' + $Zone
        }
    } else {
        $Fqdn = $Zone
    }

    if ($Fqdn -notmatch $Zone ) {
        Write-Warning -Message "The zone ($Zone) does not contain $Fqdn."
        return
    }

    if ($null -eq (Get-DynDnsZone -Zone $Zone)) {
        return
    }

    $ZoneRecords = Get-DynDnsRecord -Zone $Zone -Node $Node -RecordType All
    $HttpRedirects = Get-DynDnsHttpRedirect -Zone $Zone -Node $Node

    if ($ZoneRecords -or $HttpRedirects) {
        if (-Not $Force) {
            Write-Warning -Message "The node ($Fqdn) contains records or services. Use the -Force switch if you wish to proceed."
            return
        } else {
            $Message = "`n"
            $Message += "`n" + ('-' * 80) + "`n"
            $Message += 'PROCEEDING WILL DELETE ALL RECORDS AND SERVICES CONTAINED WITHIN THE NODE' + "`n"
            $Message += 'THIS INCLUDES ALL CHILD NODES' + "`n"
            $Message += '-' * 80 + "`n"

            if ($ZoneRecords) {
                $Message += "`n"
                $Header = "Zone records for ${Fqdn}:"
                $Message += "$Header`n"
                $Message += '-' * $Header.Length + "`n"
                $Message += ($ZoneRecords | Out-String).Trim()
                $Message += "`n"
            }
            if ($HttpRedirects) {
                $Message += "`n"
                $Header = "HTTP redirects for ${Fqdn}:"
                $Message += "$Header`n"
                $Message += '-' * $Header.Length + "`n"
                $Message += ($HttpRedirects | Out-String).Trim()
                $Message += "`n"
            }
            $Message += "`n" + ('-' * 80) + "`n"
            $Message += "`n"
            $Message
        }
    }

    if ($PSCmdlet.ShouldProcess("$Fqdn",'Delete node, child nodes, and all records')) {
        $RemoveNode = Invoke-DynDnsRequest -UriPath "/REST/Node/$Zone/$Fqdn" -Method Delete
        Write-DynDnsOutput -DynDnsResponse $RemoveNode
    } else {
        Write-Verbose 'Whatif : Removed node'
    }
}