Public/Disconnect-NSPFortinetSupport.ps1

function Disconnect-NSPFortinetSupport {
    <#
    .SYNOPSIS
        Forgets the Fortinet support portal session and closes the browser window
        Connect-NSPFortinetSupport opened.
    .DESCRIPTION
        The browser profile keeps its SSO login, so the next Connect-NSPFortinetSupport usually
        needs no typing. Use -KeepBrowserOpen to leave the window open.
    .PARAMETER KeepBrowserOpen
        Only forget the session; leave the browser window open.
    .EXAMPLE
        Disconnect-NSPFortinetSupport
    #>

    [CmdletBinding()]
    param([switch]$KeepBrowserOpen)

    $session = $script:NSPFortinetSupportSession
    $script:NSPFortinetSupportSession = $null
    if ($KeepBrowserOpen -or -not $session -or -not $session.Port) { return }
    try {
        $version = Invoke-RestMethod -Uri "http://127.0.0.1:$($session.Port)/json/version" -TimeoutSec 2 -UseBasicParsing -ErrorAction Stop
        $socket = [System.Net.WebSockets.ClientWebSocket]::new()
        $none = [Threading.CancellationToken]::None
        $socket.ConnectAsync([uri]$version.webSocketDebuggerUrl, $none).GetAwaiter().GetResult()
        $bytes = [Text.Encoding]::UTF8.GetBytes('{"id":1,"method":"Browser.close","params":{}}')
        $socket.SendAsync([ArraySegment[byte]]::new($bytes), [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $none).GetAwaiter().GetResult()
        $socket.Dispose()
    } catch {
        Write-Verbose "The browser was already closed: $($_.Exception.Message)"
    }
}