Public/Disconnect-AnyStackServer.ps1

function Disconnect-AnyStackServer {
    <#
    .SYNOPSIS
        Terminate existing sessions to vCenter Server or ESXi Host.
 
    .DESCRIPTION
        Safely closes one or more active VIServer connections, preventing session leakage and maintaining infrastructure security.
        Optimized for multi-server environments.
 
    .PARAMETER Server
        Specifies the server(s) to disconnect. If omitted, all active sessions are terminated.
 
    .EXAMPLE
        Disconnect-AnyStackServer -Server 'vcenter.anystack.local'
        Disconnects the specified server session.
 
    .EXAMPLE
        Disconnect-AnyStackServer
        Disconnects all currently connected vSphere servers.
 
    .NOTES
        Author: The Any Stack Architect
        Version: 1.0.0.0
        Namespace: AnyStack.vSphere
    #>

    [CmdletBinding(SupportsShouldProcess=$true)]
    param(
        [Parameter(Mandatory = $false, ValueFromPipeline = $true)]
        [string[]]$Server
    )

    process {
        $ErrorActionPreference = 'Stop'
        try {
            if ($PSBoundParameters.ContainsKey('Server')) {
                foreach ($srv in $Server) {
                    Write-Verbose "Disconnecting from server: $srv"
                    Disconnect-VIServer -Server $srv -Confirm:$false -ErrorAction Stop
                }
            }
            else {
                Write-Verbose "Disconnecting from ALL vSphere servers."
                Disconnect-VIServer -Server * -Confirm:$false -ErrorAction SilentlyContinue
            }
            
            # Return success object
            [PSCustomObject]@{
                Timestamp = (Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
                Operation = 'Disconnect'
                Status    = 'Success'
            }
        }
        catch {
            Write-Error "Failed to disconnect: $($_.Exception.Message)"
            [PSCustomObject]@{
                Timestamp = (Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
                Operation = 'Disconnect'
                Status    = 'Failed'
                Error     = $_.Exception.Message
            }
        }
    }
}