Functions/Internal/Get-ConnectionString.ps1

function Get-ConnectionString{
    [Cmdletbinding()]
        param(
    [Parameter(ParameterSetName = 'Integrated Security')]
    [Parameter(ParameterSetName = 'UsernamePassword')]
    [Parameter(ParameterSetName = 'Credential')]
    [string] $TargetServer,
    [Parameter(Mandatory = $false,ParameterSetName = 'Integrated Security')]
    [Parameter(Mandatory = $false,ParameterSetName = 'UsernamePassword')]
    [Parameter(Mandatory = $false,ParameterSetName = 'Credential')]
    [string] $DatabaseName,
     [Parameter(Mandatory = $true,ParameterSetName = 'UsernamePassword')]
     [Parameter(Mandatory = $false,ParameterSetName = 'Integrated Security')]
     [string] $TargetUser,
     [Parameter(Mandatory = $true, ParameterSetName = 'UsernamePassword')]
     [securestring] $TargetPasswordSecure,
     [Parameter(Mandatory = $true,ParameterSetName = 'Credential')]
     [pscredential] $Credential
    )

    if (-not [string]::IsNullOrEmpty($TargetUser) -or $null -ne $Credential) {
        if ($null -eq $Credential) {
            $TargetCredentials = New-Object System.Management.Automation.PSCredential($TargetUser, $TargetPasswordSecure )
        }
        else {
            $TargetCredentials = $Credential
        }
        $connectionString = "Server=$TargetServer;Database=$DatabaseName;User ID=$($TargetCredentials.UserName);Password=`$(`$TargetCredentials.GetNetworkCredential().Password)"
    }
    else {
        $connectionString = "Server=$TargetServer;Database=$DatabaseName;trusted_connection=true"    
    }
   
    $connectionString += ";Connect Timeout=2"
    Write-Verbose "Connection String $connectionString"
    return $ExecutionContext.InvokeCommand.ExpandString($connectionString);
}