Cmdlets/Close-SqlConnection.ps1

<#
.Synopsis
    Closes an existing connection.
 
.Description
    Closes the connection and disposes of the underlying object.
    This will also rollback the current transaction if there is one.
 
.Parameter ConnectionName
    User Defined name for the SqlConnection.
 
#>

Filter Close-SqlConnection {
    [CmdletBinding()]
    Param([parameter(ValueFromPipeline, Position=0)][ValidateNotNullOrEmpty()][Alias("cn")][string]$ConnectionName = "default")
    
    If(-not (TestConnectionName $ConnectionName)) { return }
    Else {
        If($Script:Connections.$ConnectionName.HasTransaction()) {
            $Script:Connections.$ConnectionName.RollbackTransaction()
        }
        Try { $Script:Connections.$ConnectionName.Connection.Close() }
        Finally {
            $Script:Connections.$ConnectionName.Connection.Dispose()
            $Script:Connections.Remove($ConnectionName)
        }        
    }    
}

Set-Alias -Name csc -Value Close-SqlConnection
Export-ModuleMember -Function Close-SqlConnection -Alias csc