Public/Get-LocalInstance.ps1

function Get-LocalInstance {

    <#
 
    .SYNOPSIS
    Returns connection parameters for an available LocalDB instance.
 
    .DESCRIPTION
    Uses PsSqlLocalDb and the [SqlLocalDB utility](https://learn.microsoft.com/sql/tools/sqllocaldb-utility)
    to retrieve available LocalDB instances.
 
    .EXAMPLE
    PS> Get-SqlTestLocalInstance
    Gets the first available LocalDB instance. Requires PsSqlLocalDb and an installed LocalDB utility.
    Captured output (instance name redacted; the installed version may vary):
 
    Name : <redacted>
    Version : 15.0.4382.1
    DataSource : (LocalDb)\<redacted>
    ConnectTimeout : 30
    ConnectionString : Data Source=(LocalDb)\<redacted>;Connect Timeout=30;Integrated Security=True
    IsLocalDb : True
 
    .LINK
    https://abbgrade.github.io/PsSqlTestServer/docs/Get-SqlTestLocalInstance.html
 
    #>


    [CmdletBinding()]
    param (
        # Specifies maximum number of returned sql server instances.
        [Parameter()]
        [int] $First = 1,

        # Filters the version of the returned sql server instance.
        [Parameter()]
        [System.Version] $Version
    )

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

    $selectParam = @{}
    if ( $First ) {
        $selectParam.First = $First
    }

    Get-LocalDbInstance -Version:$Version | Select-Object @selectParam | ForEach-Object {
        $instance = $PSItem

        # 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

        # return
        $instance | Write-Output
    }
}