Private/Get-AnyStackConnection.ps1

function Get-AnyStackConnection {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAlignAssignmentStatement", "")]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseConsistentIndentation", "")]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseConsistentWhitespace", "")]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "")]
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$false)]
        $Server
    )

    $activeConnections = @()
    foreach ($variableName in 'DefaultVIServers', 'defaultVIServers', 'DefaultVIServer', 'defaultVIServer') {
        $variable = Get-Variable -Name $variableName -Scope Global -ErrorAction SilentlyContinue
        if ($variable -and $null -ne $variable.Value) {
            $activeConnections += @($variable.Value)
        }
    }
    $activeConnections = @(
        $activeConnections |
            Where-Object { $_ -and $_.PSObject.Properties.Name -contains 'IsConnected' -and $_.IsConnected }
    )
    $activeConnections = @(
        $activeConnections |
            Group-Object {
                if ($_.PSObject.Properties.Name -contains 'Uid' -and $_.Uid) {
                    $_.Uid
                }
                elseif ($_.PSObject.Properties.Name -contains 'Name' -and $_.Name) {
                    $_.Name
                }
                else {
                    [System.Runtime.CompilerServices.RuntimeHelpers]::GetHashCode($_)
                }
            } |
            ForEach-Object { $_.Group[0] }
    )

    if ($null -eq $Server) {
        if ($activeConnections.Count -eq 1) {
            return $activeConnections[0]
        }

        if ($activeConnections.Count -gt 1) {
            throw "Multiple active vCenter Server connections found. Please specify -Server."
        }

        throw "No active vCenter Server connection found. Please use Connect-AnyStackServer first or pass -Server."
    }

    if ($Server -is [VMware.VimAutomation.Types.VIServer]) {
        return $Server
    }

    # Support PSCustomObject mock objects (e.g. in unit tests)
    if ($Server -is [PSCustomObject] -and $Server.PSObject.Properties.Name -contains 'IsConnected') {
        return $Server
    }

    if ($Server -is [string]) {
        $vi = $activeConnections |
            Where-Object { $_.Name -eq $Server } |
            Select-Object -First 1
        if ($null -eq $vi) {
            throw "Not connected to vCenter Server '$Server'. Please use Connect-AnyStackServer first."
        }
        return $vi
    }

    throw "Invalid Server parameter. Must be omitted, a server name, or a VIServer object."
}