Public/New-Database.ps1

function New-Database {

    <#
 
    .SYNOPSIS
    Creates a new database and returns the connection parameters.
 
    .DESCRIPTION
    Uses a existing test instance and creates a database for (temporary) use.
    It keeps an open connection to the instance for later removal.
 
    .EXAMPLE
    PS> $Instance = New-SqlTestInstance
    PS> $InstanceConnection = $Instance | Connect-TSqlInstance
    PS> New-SqlTestDatabase -Instance $Instance -InstanceConnection $InstanceConnection
 
    ConnectionString : Data Source=(LocalDb)\MSSQLLocalDB;Connect Timeout=30;Integrated Security=True;Initial Catalog=a48b028c
    DataSource : (LocalDb)\MSSQLLocalDB
    ConnectTimeout : 30
    Version : v11.0
    InitialCatalog : a48b028c
    InstanceConnection : Microsoft.Data.SqlClient.SqlConnection
 
    #>


    [CmdletBinding()]
    param (
        # Specifies the instance, to create the database in.
        [Parameter( Mandatory, ValueFromPipeline )]
        [ValidateNotNullOrEmpty()]
        [PsObject] $Instance,

        # Specifies a open sql connection to the instance.
        [Parameter( Mandatory, ValueFromPipelineByPropertyName )]
        [ValidateNotNullOrEmpty()]
        [Alias('Connection')]
        [Microsoft.Data.SqlClient.SqlConnection] $InstanceConnection,

        # Specifies the name of the database to create.
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string] $Name = ( New-DatabaseName ),

        # Speficies if a SqlClient connection should be created.
        [Parameter()]
        [switch] $Connected
    )

    process {
        $Database = $Instance.PsObject.Copy()
        $Database | Add-Member InstanceName $Database.Name
        $Database.Name = $Name

        Invoke-TSqlCommand "CREATE DATABASE [$Name]" -Connection $InstanceConnection

        $Database | Add-Member InitialCatalog $Name
        $Database.ConnectionString += ";Initial Catalog=$( $Database.InitialCatalog )"
        $Database | Add-Member InstanceConnection $InstanceConnection

        # connect instance if needed
        if ( $Connected.IsPresent ) {
            $DatabaseConnection = $Database | Connect-TSqlInstance
            if ( $DatabaseConnection | Test-TSqlConnection ) {
                $Database.Connection = $DatabaseConnection
            } else {
                Write-Error "Failed to connect database."
            }
        }

        Write-Output $Database
    }
}