Public/Connect-IDNW.ps1

<#
    .SYNOPSIS
        Connects to IdentityNow.

    .DESCRIPTION
        This function connects to IdentityNow and sets the environment variables for the specified instance.

    .EXAMPLE
        Connect-IDNW -Instance "Sandbox"

    .PARAMETER Instance
        The IdentityNow instance to connect to.

    .PARAMETER APIVersion
        The API version to use when executing API Calls. Default is 'v3'.

    .PARAMETER UseSecretManagement
        Use Microsoft.PowerShell.SecretManagement to retrieve the IDNW secrets. Default is $false.

    .INPUTS
        None

    .OUTPUTS
        None
#>


function Connect-IDNW {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments","")]
    [CmdletBinding(
        SupportsShouldProcess = $False,
        ConfirmImpact = "None",
        SupportsPaging = $False,
        PositionalBinding = $True)
    ]
    param (
        [Parameter(Mandatory = $false)]
        [Alias("Environment")]
        [ValidateSet("Sandbox","ACC", "PRD")]
        [String]
        $Instance,

        [Parameter(Mandatory = $false)]
        [ValidateSet("v3", "v2024", "beta")]
        [String]
        $APIVersion = 'v3',

        [Parameter(Mandatory = $false)]
        [Switch]
        $UseSecretManagement = $false
    )

    switch ($Instance.ToLower()) {
        { "sandbox" } {
            $Instance = "Sandbox"
        }
        { "prd", "acc" -contains $_ } {
            $Instance = $_.ToUpper()
        }
    }

    $Parameters = @{
        APIVersion = $APIVersion
        UseSecretManagement = $UseSecretManagement
    }
    if ($PSBoundParameters.ContainsKey('Instance')) {
        Write-Verbose "Instance: $Instance"
        $Parameters.Add("Instance", $Instance)
    }
    else {
        Write-Verbose "Instance: Not Specified"
    }

    $script:IDNWEnv = Get-IDNWEnvironment @Parameters
    # Build formatted output using a here-string for alignment
    $identityNowInfo = @"

=========================================
        Connected to IdentityNow
=========================================

Instance: $Instance
Tenant ID: $($script:IDNWEnv.SessionTokenDetails.tenant_id)
Pod: $($script:IDNWEnv.SessionTokenDetails.pod)
Org: $($script:IDNWEnv.SessionTokenDetails.org)
Authorities: $($script:IDNWEnv.SessionTokenDetails.Authorities -join ', ')
Base URL: $($script:IDNWEnv.BaseAPIURL)
API Version: $($script:IDNWEnv.APIVersion)
Token Expires: $($script:IDNWEnv.SessionTokenDetails.expiryDateTime)

"@


    # Write the formatted output
    Write-Output $identityNowInfo

}