functions/Connect-SL1.ps1

function Connect-SL1 {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory, Position=0, ValueFromPipeline)]
        [String]$Uri,

        [Parameter(Mandatory, Position=1)]
        [PSCredential]$Credential,

        [Parameter(Position=2)]
        [Switch]$Passthru
    )

    Process {
        if ($Script:SL1Defaults.APIRoot -ne $uri -or $Script:SL1Defaults.Credential -ne $Credential ) {
            $Script:SL1Defaults.APIRoot = $Uri
            $Script:SL1Defaults.Credential = $Credential
            $Result = Invoke-SL1Request Get "$($Script:SL1Defaults.APIRoot)/api/account/_self"
            if ($Result) {

                if ($Result.StatusCode -ne 200) {
                    $Script:SL1Defaults.Isconnected = $false
                    throw "Unsuccessful logon!"
                } else { $Script:SL1Defaults.IsConnected = $true }
            } else {
                throw '$Result is empty!'
            }

        } else {
            $Result = Invoke-SL1Request Get "$($Script:SL1Defaults.APIRoot)/api/account/_self"
            if ($Result.StatusCode -ne 200) {
                $Script:SL1Defaults.Isconnected = $false
                throw "Unsuccessful logon!"
            } else { $Script:SL1Defaults.IsConnected = $true }
        }
        if ($Passthru) {
            [pscustomobject]@{
                'IsConnected'=$Script:SL1Defaults.IsConnected
            }
        }
    }
}