Public/Get-Instance.ps1

function Get-Instance {

    <#
 
    .SYNOPSIS
    Returns connection parameters to a available localDb.
 
    .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> Get-LocalDbInstance
 
    [PSCustomObject]
 
    Name Value
    ---- -----
    Name MSSQLLocalDB
    Version v11.0
 
    #>


    [CmdletBinding( DefaultParameterSetName = 'All' )]
    param (
        # Specifies the name of the instance.
        [Parameter( ParameterSetName = 'Single' )]
        [ValidateNotNullOrEmpty()]
        [string] $Name
    )

    process {
        switch ($PSCmdlet.ParameterSetName) {
            All {
                Write-Verbose "Get sqllocaldb instances."
                $response = sqllocaldb info

                $response | Where-Object { $_ } | Write-Verbose
                if ( -not $? ) {
                    Write-Error "Failed to get info sqllocaldb for instance $Name."
                }

                $response | ForEach-Object {
                    Get-Instance -Name $PSItem
                }
            }
            Single {
                Write-Verbose "Get sqllocaldb instance $Name."
                $response = sqllocaldb info $Name

                $response | Where-Object { $_ } | Write-Verbose
                if ( -not $? ) {
                    Write-Error "Failed to get info from sqllocaldb."
                }

                $responseIndex = 0
                $instance = New-Object PSCustomObject
                $response |
                Where-Object { $_ } |
                ForEach-Object {
                    $item = $_ -split ':', 2
                    $key = $item[0]
                    $value = $item[1]
                    if ( $value ) {
                        $value = $value.Trim()
                    }
                    Write-Verbose "$key=$value"

                    switch ( $responseIndex ) {
                        0 { $instance | Add-Member Name $value }
                        1 { $instance | Add-Member Version ( New-Object System.Version $value ) }
                        # 2 { $instance | Add-Member strongName $value }
                        # 3 { $instance | Add-Member owner $value }
                        # 4 { $instance | Add-Member autoCreate $value }
                        # 5 { $instance | Add-Member state $value }
                        # 6 { $instance | Add-Member lastStart $value }
                        7 { $instance | Add-Member NamedPipe $value }
                    }

                    $responseIndex += 1
                }

                if ( -Not $instance.Name ) {
                    Write-Warning "'sqllocaldb info' did not return an instance with name $Name"
                    $instance.Name = $Name
                }
                else {
                    Write-Verbose "Found LocalDb instance $name."
                }

                if ( -Not $instance.Version ) {
                    Write-Warning "'sqllocaldb info' did not return an instance version for $Name"
                }
                else {
                    Write-Verbose "Found LocalDb version $version."
                }

                $instance | Write-Output
            }
            default {
                Write-Error "ParameterSet $PSItem is not supported"
            }
        }
    }
}