Private/VSphere.ps1

function Connect-VSphereServer {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$Server,

        [Parameter(Mandatory = $true)]
        [string]$Target
    )

    try {
        Write-CustomLog -Message "Retrieving credentials for: $Target" -Severity 'DEBUG'
        $credential = Get-SecureCredential -Target $Target

        Write-CustomLog -Message "Connecting to vSphere server: $Server" -Severity 'DEBUG'
        $connection = Connect-VIServer -Server $Server -Credential $credential -ErrorAction Stop

        Write-CustomLog -Message "Successfully connected to vSphere server: $Server" -Severity 'DEBUG'
        return $connection
    }
    catch {
        throw "Failed to connect to vSphere server '$Server': $_"
    }
}

function Disconnect-VSphereServer {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $false)]
        [object]$Connection
    )

    try {
        if ($null -ne $Connection) {
            Write-CustomLog -Message "Disconnecting from vSphere server: $($Connection.Name)" -Severity 'DEBUG'
            Disconnect-VIServer -Server $Connection -Confirm:$false -ErrorAction Stop
            Write-CustomLog -Message "Successfully disconnected from vSphere server" -Severity 'DEBUG'
        }
        else {
            Write-CustomLog -Message "Disconnecting all vSphere server connections" -Severity 'DEBUG'
            Disconnect-VIServer -Server * -Confirm:$false -ErrorAction SilentlyContinue
        }
    }
    catch {
        Write-Warning "Failed to disconnect from vSphere server: $_"
    }
}