src/Instances/Get-XrmInstances.ps1

<#
    .SYNOPSIS
    Retrieve instances collection.
 
    .DESCRIPTION
    Get Microsoft Dataverse instance object collection according to current user rights.
#>

function Get-XrmInstances {
    [CmdletBinding()]
    param
    (        
    )
    begin {   
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); 
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);        
    }    
    process {
        
        $xrmInstances = @();
      
        if (-not $Global:XrmContext.IsAdminConnected) {
            throw "You are not connected! Please use Connect-XrmAdmin command before."
        }

        if ($Global:XrmContext.IsAdminConnected) {
            $environments = Get-AdminPowerAppEnvironment;
            $environments | ForEach-Object {          
                $internalProperties = $_.Internal.properties;
                $metadata = $_.Internal.properties.linkedEnvironmentMetadata;

                $xrmInstance = New-XrmInstance; 
                $xrmInstance.Id = $_.EnvironmentName;
                $xrmInstance.Name = $metadata.domainName;
                $xrmInstance.UniqueName = $metadata.uniqueName;
                $xrmInstance.DisplayName = $_.DisplayName;
                $url = $metadata.instanceUrl;
                if ($url) {
                    $xrmInstance.Url = $url.TrimEnd('/');
                }
                $xrmInstance.ApiUrl = $metadata.instanceApiUrl;
                $xrmInstance.Location = $_.Location;
                $xrmInstance.DataCenter = $internalProperties.azureRegionHint;
                $xrmInstance.Sku = $internalProperties.environmentSku;
                $xrmInstance.Type = $metadata.type;
                $xrmInstance.Version = $metadata.version;
                $xrmInstance.BaseLanguage = $metadata.baseLanguage;
                $xrmInstance.State = $metadata.instanceState;
                $xrmInstance.CreationTemplates = $metadata.creationTemplates;
                $xrmInstance.ParentConnection = $null;

                $xrmInstance.ConnectionString = $xrmInstance | Out-XrmConnectionString;
                $xrmInstances += $xrmInstance;
            }            
        }
        $xrmInstances | Sort-Object -Property DisplayName;
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }    
}

Export-ModuleMember -Function Get-XrmInstances -Alias *;