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 "DEV" -APIVersion "beta"
        Connects to the DEV instance using the beta API version.

    .EXAMPLE
        Connect-IDNW -Instance "TST" -APIVersion "v3"
        Connects to the TST instance using the v3 API version.

    .EXAMPLE
        Connect-IDNW -Instance "ACC" -APIVersion "v3"
        Connects to the ACC instance using the v3 API version.

    .EXAMPLE
        Connect-IDNW -Instance "PRD" -APIVersion "v3" -UseSecretManagement
        Connects to the PRD instance using the v3 API version and retrieves secrets using Microsoft.PowerShell.SecretManagement.

    .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("DEV", "TST", "ACC", "PRD")]
        [String]
        $Instance,

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

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

    $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

    # Concatenate full version string with prerelease label if present
    if ($MyInvocation.MyCommand.Module -and
        $MyInvocation.MyCommand.Module.PrivateData -and
        $MyInvocation.MyCommand.Module.PrivateData.PSData) {
        $PrereleaseLabel = $MyInvocation.MyCommand.Module.PrivateData.PSData['Prerelease']
    }
    else {
        $PrereleaseLabel = $null
    }
    $ModuleVersion = $MyInvocation.MyCommand.Module.Version
    if (-not [string]::isNullOrEmpty($PrereleaseLabel)) {
        $VersionString = ("{0}-{1}" -f $ModuleVersion, $PrereleaseLabel)
    }
    else {
        $VersionString = $ModuleVersion
    }
    # Build formatted output using a here-string for alignment
    $identityNowInfo = @"

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

Instance: $Instance
Tenant ID: $($script:IDNWEnv.SessionTokenDetails.tenant_id)
User: $($script:IDNWEnv.SessionTokenDetails.user_name)
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)
Module Version: $($VersionString)
Token Expires: $($script:IDNWEnv.SessionTokenDetails.expiryDateTime)

"@


    # Write the formatted output
    Write-Output $identityNowInfo

}