Public/Get-AzureInstance.ps1

function Get-AzureInstance {

    <#
 
    .SYNOPSIS
    Returns connection parameters for an existing Azure SQL Server.
 
    .DESCRIPTION
    Retrieves Azure SQL Servers in the selected subscription and resource group and returns the first server
    with DataSource, ConnectTimeout, and ConnectionString properties. Requires Az modules and an authenticated
    Azure context.
 
    .EXAMPLE
    PS> Connect-AzAccount
    PS> Get-SqlTestAzureInstance
    Retrieves the first SQL Server from the default PsSqlTestServer resource group in the current subscription.
    Captured output (server name redacted):
 
    ResourceGroupName : PsSqlTestServer
    ServerName : <redacted>
    FullyQualifiedDomainName : <redacted>.database.windows.net
    DataSource : <redacted>.database.windows.net
    ConnectTimeout : 30
    ConnectionString : Data Source=<redacted>.database.windows.net;Connect Timeout=30;Authentication=Active Directory Integrated
 
    .LINK
    https://abbgrade.github.io/PsSqlTestServer/docs/Get-SqlTestAzureInstance.html
 
    #>


    [CmdletBinding()]
    param(
        # Specifies the Azure Subscription name.
        [ValidateNotNullOrEmpty()]
        [string] $Subscription,

        # Specifies the Azure Resource Group name.
        [ValidateNotNullOrEmpty()]
        [string] $ResourceGroupName = 'PsSqlTestServer'
    )

    if ( $Subscription ) {
        $subscriptionId = [guid]::Empty
        if ( [guid]::TryParse($Subscription, [ref]$subscriptionId) ) {
            $subscriptionDetails = Get-AzSubscription -SubscriptionId $subscriptionId
        }
        else {
            $subscriptionDetails = Get-AzSubscription -SubscriptionName $Subscription
        }

        if ( -Not $subscriptionDetails ) {
            Write-Error -Message "Azure subscription '$Subscription' was not found or is not accessible to the current account."
            return
        }
        if ( $subscriptionDetails.Count -gt 1 ) {
            Write-Error -Message "Multiple Azure subscriptions named '$Subscription' were found. Specify the subscription ID instead."
            return
        }

        Write-Verbose "Setting Azure context to subscription '$($subscriptionDetails[0].Name)' ($($subscriptionDetails[0].Id))."
        $azureContext = Set-AzContext -Subscription $subscriptionDetails[0].Id
    }
    else {
        Write-Verbose 'Using the current Azure context.'
        $azureContext = Get-AzContext
    }

    if ( $azureContext.Subscription ) {
        Write-Verbose "Using Azure subscription '$($azureContext.Subscription.Name)' ($($azureContext.Subscription.Id))."
    }

    Write-Verbose "Looking up Azure resource group '$ResourceGroupName'."
    $ResourceGroup = Get-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
    if ( $ResourceGroup ) {
        Write-Verbose "Using Azure resource group '$($ResourceGroup.ResourceGroupName)'."
    }
    else {
        Write-Error -Message "Azure resource group '$ResourceGroupName' was not found in the selected subscription. Create it with New-SqlTestAzureInstance or specify an existing one."
        return
    }

    $Servers = Get-AzSqlServer -ResourceGroupName $ResourceGroup.ResourceGroupName

    if ( -Not $Servers ) {
        Write-Error -Message "No Azure SQL Servers were found in resource group '$ResourceGroupName'."
        return
    }
    if ( $Servers.Count -gt 1 ) {
        Write-Warning "Multiple Azure SQL Servers were found in resource group '$ResourceGroupName'. Returning the first one."
    }

    $Server = $Servers[0]
    $Server | Add-Member DataSource $Server.FullyQualifiedDomainName
    $Server | Add-Member ConnectTimeout 30
    $Server | Add-Member ConnectionString ( New-SqlConnectionString `
            -DataSource $Server.DataSource `
            -ConnectTimeout $Server.ConnectTimeout `
            -Authentication 'Authentication=Active Directory Integrated'
    )
    $Server | Write-Output
}