Functions/Connect-SqlServer.ps1

<#
    .SYNOPSIS
        Validate the connection details and store them in the default parameter
        values for SQL commands.

    .DESCRIPTION
        Use the Test-SqlConnection command to test the connection. If it was
        successful, store the connection details in the PSDefaultParameterValues
        variable:
        - *-Dba*:SqlInstance
        - *-Dba*:SqlCredential
        - *-Sql*:SqlInstance
        - *-Sql*:SqlCredential
        - *-Sql*:ServerInstance
        - *-Sql*:Credential

    .LINK
        https://github.com/claudiospizzi/SqlServerFever
#>

function Connect-SqlServer
{
    [CmdletBinding()]
    param
    (
        # SQL instance name.
        [Parameter(Mandatory = $true)]
        [System.String]
        $SqlInstance,

        # SQL credential. If not specified, use the integrated Windows
        # authentication.
        [Parameter(Mandatory = $false)]
        [ValidateNotNull()]
        [System.Management.Automation.PSCredential]
        $SqlCredential,

        # Optionally store the database name to connect to.
        [Parameter(Mandatory = $false)]
        [ValidateNotNull()]
        [System.String]
        $Database
    )

    try
    {
        if ($PSBoundParameters.ContainsKey('SqlCredential'))
        {
            Test-SqlConnection -SqlInstance $SqlInstance -SqlCredential $SqlCredential -WarningAction 'SilentlyContinue' -ErrorAction 'Stop' | Out-Null

            $Global:PSDefaultParameterValues['*-Dba*:SqlInstance'] = $SqlInstance
            $Global:PSDefaultParameterValues['*-Dba*:SqlCredential'] = $SqlCredential

            $Global:PSDefaultParameterValues['*-Sql*:SqlInstance'] = $SqlInstance
            $Global:PSDefaultParameterValues['*-Sql*:SqlCredential'] = $SqlCredential

            $Global:PSDefaultParameterValues['*-Sql*:ServerInstance'] = $SqlInstance
            $Global:PSDefaultParameterValues['*-Sql*:Credential'] = $SqlCredential
        }
        else
        {
            Test-SqlConnection -SqlInstance $SqlInstance -WarningAction 'SilentlyContinue' -ErrorAction 'Stop' | Out-Null

            $Global:PSDefaultParameterValues['*-Dba*:SqlInstance'] = $SqlInstance
            $Global:PSDefaultParameterValues.Remove('*-Dba*:SqlCredential')

            $Global:PSDefaultParameterValues['*-Sql*:SqlInstance'] = $SqlInstance
            $Global:PSDefaultParameterValues.Remove('*-Sql*:SqlCredential')

            $Global:PSDefaultParameterValues['*-Sql*:ServerInstance'] = $SqlInstance
            $Global:PSDefaultParameterValues.Remove('*-Sql*:Credential')
        }

        if ($PSBoundParameters.ContainsKey('Database'))
        {
            $Global:PSDefaultParameterValues['*-Dba*:Database'] = $Database

            $Global:PSDefaultParameterValues['*-Sql*:Database'] = $Database
        }
        else
        {
            $Global:PSDefaultParameterValues.Remove('*-Dba*:Database')

            $Global:PSDefaultParameterValues.Remove('*-Sql*:Database')
        }
    }
    catch
    {
        throw "Failed to connect to the SQL Server $SqlInstance with error: $_"
    }
}