Public/Connect-AnyStackServer.ps1

function Connect-AnyStackServer {
    <#
    .SYNOPSIS
        Connects to a vCenter Server or ESXi host.
    .DESCRIPTION
        Establishes a session using Connect-VIServer.
    .PARAMETER Server
        DNS name or IP of the server.
    .PARAMETER Credential
        PSCredential object for authentication.
    .EXAMPLE
        PS> Connect-AnyStackServer -Server 'vcenter.corp.local' -Credential (Get-Credential)
    .OUTPUTS
        PSCustomObject
    .NOTES
        Author: The AnyStack Architect
        Requires: VMware.PowerCLI 13.0+, vSphere 8.0 U3+
    #>

    [CmdletBinding(SupportsShouldProcess=$false)]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)]
        [ValidateNotNullOrEmpty()]
        [string[]]$Server,
        [Parameter(Mandatory=$false)]
        [System.Management.Automation.PSCredential]$Credential
    )
    begin {
        $ErrorActionPreference = 'Stop'
    }
    process {
        foreach ($srv in $Server) {
            try {
                Write-Verbose "[$($MyInvocation.MyCommand.Name)] Attempting connection to $srv"
                $connArgs = @{ Server = $srv; ErrorAction = 'Stop' }
                if ($Credential) { $connArgs.Credential = $Credential }
                
                $session = Invoke-AnyStackWithRetry -ScriptBlock { Connect-VIServer @connArgs }
                
                [PSCustomObject]@{
                    PSTypeName = 'AnyStack.Connection'
                    Timestamp  = (Get-Date)
                    Status     = 'Connected'
                    Server     = $srv
                    SessionID  = $session.SessionId
                    Version    = "$($session.Version) Build $($session.Build)"
                }
            }
            catch {
                Write-Error "Connection to $srv failed: $($_.Exception.Message)"
                [PSCustomObject]@{
                    PSTypeName = 'AnyStack.Connection'
                    Timestamp  = (Get-Date)
                    Status     = 'Failed'
                    Server     = $srv
                    Error      = $_.Exception.Message
                }
            }
        }
    }
}