Get-IpsCredentials.ps1

<#
.SYNOPSIS
Gets a list of the Image Portability Service credentials in a customer credential wallet.

.DESCRIPTION
Gets a list of the Image Portability Service credentials in a customer credential wallet. This returns metadata such as the
credential name, type and creation data. No secret values (e.g. passwords or keys) are returned.

.PARAMETER CustomerId
Specifies the customer id of the Citrix customer running this command.

.PARAMETER SecureClientId
Specifies the client id of the Citrix customer's API client.

.PARAMETER SecureSecret
Specifies the client secret of the Citrix customer's API client.

.PARAMETER CredentialType
Specifies the type of credentials to list. If unspecified all types of credential are listed.

.PARAMETER Deployment
Specifies the service address to send the job request to. It defaults to api.layering.cloud.com. This can be used if necessary to send the request to a geo specific deployment such as api.eu.layering.cloud.com.

.PARAMETER LogFileDir
Specifies the path to the file to log to. The local directory is the default.

.PARAMETER LogFileName
Specifies the name of the file to log to.

.PARAMETER OverwriteLog
If specified the log file is overwritten otherwise it is appended to.

.INPUTS
None.

.OUTPUTS
Array of PSCustomObject. List of credential metadata.

.EXAMPLE
PS> $CitrixCreds = @{
    CustomerId = 'a7f4wb1example'
    SecureClientId = '7fed2a1e-1495-46b7-8fd3-5644764af395'
    SecureSecret = '9T.3Q~MGlnB6NNgpNUUWrcquVzODrdGK~eXampLe'
}
PS> Get-IpsCredentials @CitrixCreds -CredentialType Azure | Format-Table
Logging to C:\workspace\al\migrationapiclient\test\Credentials.log Verbose False
Authenticating for Citrix customer a7f4wb1example using API key 7fed2a1e-1495-46b7-8fd3-5644764af395.
Authenticated for Citrix customer a7f4wb1example.
Getting credentials from credential wallet

id type state createdAt updatedAt
-- ---- ----- --------- ---------
azure-ips-example Azure Ok 2023-02-02T14:23:32.4047936Z 2023-02-02T14:23:32.4047936Z
azure-ips-test Azure Ok 2022-11-22T20:44:37.1097898Z 2022-11-23T18:21:10.3983318Z

List all credentials of type 'Azure.
#>


Function Get-IpsCredentials
{
    [CmdletBinding()]
    Param(
        # Citrix Cloud customer id.
        [Parameter(Mandatory = $true)]
        [string]$CustomerId,
        [Parameter(Mandatory = $false)]
        [ValidateSet("Azure", "Gcp", "UsernamePassword", "Aws")]
        [string]$CredentialType,
        # Citrix Cloud credentials.
        [Parameter(Mandatory = $false)]
        [string]$SecureClientId,
        [Parameter(Mandatory = $false)]
        [string]$SecureSecret,
        [Parameter(Mandatory = $false)]
        [string]$Deployment,
        [Parameter(Mandatory = $false)]
        [string]$LogFileDir,
        [Parameter(Mandatory = $false)]
        [string]$LogFileName = 'Credentials.log',
        [Parameter(Mandatory = $false)]
        [switch]$OverwriteLog
    )
    Begin
    {
        Add-PSSnapin Citrix.*
    }
    Process
    {
        # Initialize Logger
        # Set parameter 'Verbose' by internal parameter 'VerbosePreference', since the option -Verbose is occupied by powershell cmdlet
        $Verbose = $VerbosePreference -eq 'Continue'
        LogInit $MyInvocation $LogFileDir $LogFileName $OverwriteLog $Verbose

        VersionCheck $Deployment $CustomerId

        try {
            # Authenticate to Citrix Cloud
            $parameters = AuthToCitrixCloud $CustomerId $SecureClientId $SecureSecret
            if ([string]::IsNullOrWhiteSpace($SecureClientId) -Or [string]::IsNullOrWhiteSpace($SecureSecret)) {
                $SecureClientId = $parameters.ApiKey
                $SecureSecret = $parameters.SecretKey
            }
        }
        catch {
            return
        }

        try {
            LogIt "Getting credentials from credential wallet."
            $credentialsList = Invoke-CCRestMethod 'Get' $Deployment 'credentials' $CustomerId $SecureClientId $SecureSecret @{} $null
            if (-not [string]::IsNullOrWhiteSpace($CredentialType)) {
                LogIt "Listing credentials of type $CredentialType" $False
                foreach ($credential in $credentialsList.items) {
                    if ($credential.type -eq $CredentialType) {
                        LogIt $credential $False
                        Write-Output $credential
                    }
                }
            }
            else {
                LogIt "Listing all credentials" $False
                foreach ($credential in $credentialsList.items) {
                    LogIt $credential $False
                    Write-Output $credential
                }
            }
        } catch {
            LogFatal "Failed to get the credential list: $_"
        }
    }
}