Public/Disconnect-UnifiController.ps1

function Disconnect-UnifiController {
    [CmdletBinding()]
    param()

    if (-not $script:UnifiSession -or -not $script:UnifiConfig) {
        Write-Warning "Not currently connected to a controller."
        return
    }

    $baseUrl = $script:UnifiConfig.ControllerUrl

    $params = @{
        Method     = 'POST'
        Uri        = "$baseUrl/api/logout"
        WebSession = $script:UnifiSession
    }

    if ($script:UnifiConfig.SkipCertificateCheck) {
        $params.SkipCertificateCheck = $true
    }

    try {
        Invoke-RestMethod @params | Out-Null
    }
    catch {
        # Session may already be expired — clear local state regardless
        Write-Verbose "Logout request failed (session may have already expired): $_"
    }

    $script:UnifiSession = $null
    $script:UnifiConfig  = $null

    Write-Host "Disconnected." -ForegroundColor Yellow
}