functions/New-DBSMOServer.ps1

function New-DBSMOServer {
    <#
    .SYNOPSIS
        Returns a type of [Microsoft.SqlServer.Management.Common.ServerConnection] used for SMO connections
 
    .PARAMETER ServerInstance
        The sql server instance to connect to.
 
    .PARAMETER Credentials
        Specifies credentials to connect to the database with. If not supplied then a trusted connection will be used.
 
    .PARAMETER ApplicationName
        The application name that will be supplied to the connection.
 
    .OUTPUTS
        Returns a type of [Microsoft.SqlServer.Management.Common.ServerConnection] used for SMO connections
 
    .EXAMPLE
 
    PS> $server = New-DBSMOServer -ServerInstance "ServerName"
 
    .LINK
        https://github.com/tcartwright/tcdbtools
 
    .NOTES
        Author: Tim Cartwright
    #>

    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification='Not needed')]
    [OutputType([Microsoft.SqlServer.Management.Smo.Server])]
    param (
        [string]$ServerInstance,
        [pscredential]$Credentials,
        [string]$ApplicationName = "tcdbtools"
    )

    begin {

    }

    process {
        $serverConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
        $serverConnection.ServerInstance = $ServerInstance
        $serverConnection.ApplicationName = $ApplicationName
        if ($Credentials) {
            $serverConnection.LoginSecure = $false
            $serverConnection.Login = $Credentials.UserName
            $serverConnection.SecurePassword = $Credentials.Password
        }

        $server = New-Object Microsoft.SqlServer.Management.Smo.Server($serverConnection)
        if ($null -eq $server.Version ) {
            throw "Unable to connect to: $ServerInstance"
            exit 1
        }
    }

    end {
        return $server
    }
}