Public/New-LocalInstance.ps1

function New-LocalInstance {

    <#
 
    .SYNOPSIS
    Creates a LocalDB instance and returns its connection parameters. Requires PsSqlLocalDb and an installed LocalDB utility.
 
    .DESCRIPTION
    Uses [SqlLocalDB Utility](https://docs.microsoft.com/en-us/sql/tools/sqllocaldb-utility?view=sql-server-ver15) to get info about the available local db.
 
    .EXAMPLE
    PS> $instance = New-SqlTestLocalInstance
    Creates a temporary LocalDB instance. The selected SQL Server version depends on the versions installed locally.
    Captured output (temporary instance name redacted; the installed version may vary):
 
    Name : test-<redacted>
    Version : 15.0.4382.1
    DataSource : (LocalDb)\test-<redacted>
    ConnectTimeout : 30
    ConnectionString : Data Source=(LocalDb)\test-<redacted>;Connect Timeout=30;Integrated Security=True
    IsLocalDb : True
    PS> $instance | Remove-SqlTestLocalInstance
    Removes the LocalDB instance created by this example.
 
    .LINK
    https://abbgrade.github.io/PsSqlTestServer/docs/New-SqlTestLocalInstance.html
 
    #>


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

        # Specifies the version of the sql server.
        [Parameter()]
        [System.Version] $Version,

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

    $LocalDbModule = Import-Module PsSqlLocalDb -MinimumVersion 0.6.0 -PassThru
    if ( -not $LocalDbModule ) {
        return
    }

    # create instance
    $Instance = New-LocalDbInstance -Name $Name -Version:$Version -WhatIf:$WhatIfPreference
    if ( -not $Instance ) {
        return
    }

    # add metadata
    $Instance | Add-Member DataSource "(LocalDb)\$( $Instance.Name )"
    $Instance | Add-Member ConnectTimeout 30
    $Instance | Add-Member ConnectionString ( New-SqlConnectionString `
            -DataSource $Instance.DataSource `
            -ConnectTimeout $Instance.ConnectTimeout `
            -Authentication 'Integrated Security=True'
    )
    $Instance | Add-Member IsLocalDb $true

    # connect instance if needed
    if ( $Connected.IsPresent ) {
        $InstanceConnection = $Instance | Connect-TSqlInstance
        if ( $InstanceConnection | Test-TSqlConnection ) {
            $Instance | Add-Member Connection $InstanceConnection
        } else {
            Write-Error "Failed to connect instance."
        }

    }

    # return
    $Instance | Write-Output
}