src/Organization/Get-XrmEnvironmentVariableDefinitions.ps1

<#
    .SYNOPSIS
    List the environment variables of the organization.

    .DESCRIPTION
    Return one summary per environment variable definition (see Get-XrmEnvironmentVariable): SchemaName, DisplayName, Type, DefinitionId, DefaultValue, ValueId, Value, EffectiveValue, HasOverride.

    .PARAMETER XrmClient
    Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient)

    .PARAMETER Type
    Types to keep: String, Number, Boolean, JSON, DataSource, Secret. (Default: all)

    .PARAMETER Prefix
    Keep only the schema names starting with this prefix (e.g. a publisher prefix "new_"). (Default: all)

    .OUTPUTS
    PSCustomObject. One summary per environment variable.

    .EXAMPLE
    Get-XrmEnvironmentVariableDefinitions -XrmClient $xrmClient -Prefix "new_" | Format-Table SchemaName, EffectiveValue, HasOverride;

    .LINK
    https://github.com/AymericM78/PowerDataOps/blob/main/documentation/commands/Get-XrmEnvironmentVariableDefinitions.md
#>

function Get-XrmEnvironmentVariableDefinitions {
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param
    (
        [Parameter(Mandatory = $false, ValueFromPipeline)]
        [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient]
        $XrmClient = $Global:XrmClient,

        [Parameter(Mandatory = $false)]
        [ValidateSet("String", "Number", "Boolean", "JSON", "DataSource", "Secret")]
        [String[]]
        $Type,

        [Parameter(Mandatory = $false)]
        [ValidateNotNullOrEmpty()]
        [String]
        $Prefix
    )
    begin {
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);
    }
    process {
        $hasType = $PSBoundParameters.ContainsKey('Type');
        $hasPrefix = $PSBoundParameters.ContainsKey('Prefix');
        Get-XrmEnvironmentVariablesInternal -XrmClient $XrmClient | Where-Object {
            (-not $hasType -or $Type -contains $_.Type) -and (-not $hasPrefix -or $_.SchemaName.StartsWith($Prefix, [System.StringComparison]::OrdinalIgnoreCase));
        };
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }
}

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