Public/Remove-GAWebUser.ps1

<#
.SYNOPSIS
Removes a GoAnywhere Web User.
 
.DESCRIPTION
Performs a DELETE request to remove a Web User by username.
Returns $true if successful, $false otherwise.
 
.PARAMETER Client
A GoAnywhere client object returned by New-GAClient.
 
.PARAMETER Username
The Web User's username to delete.
 
.EXAMPLE
Remove-GAWebUser -Client $client -Username "user1"
 
#>

function Remove-GAWebUser {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)][PSObject]$Client,
        [Parameter(Mandatory)][string]$Username
    )

    $baseUri = $Client.BaseUri.TrimEnd('/')

    $uri = "$baseUri/webusers/$([System.Web.HttpUtility]::UrlEncode($Username))"

    Write-Verbose "Deleting Web User '$Username' at $uri"

    try {
        $response = Invoke-WebRequest -Uri $uri -Method Delete -Headers $Client.Header -ErrorAction Stop

        Write-Verbose "Received HTTP $($response.StatusCode) response"

        return $true
    }
    catch {
        $statusCode = $null

        if ($_.Exception.Response -and $_.Exception.Response.StatusCode) {
            try { $statusCode = [int]$_.Exception.Response.StatusCode } catch {}
        }

        Write-Verbose "Caught exception. Status code: $statusCode. Message: $($_.Exception.Message)"

        if ($statusCode -in 401,404) {
            Write-Verbose "Web User '$Username' not found (401/404). Nothing to delete."
            return $null
        }

        throw "Failed to delete Web User '$Username': $($_.Exception.Message)"
    }
}