ExportedFunctions/Get-AnsibleCredential.ps1

<#
.DESCRIPTION
  Gets credentials configured in Ansible Tower.

.PARAMETER CredentialType
  Specify the type of credential you want to create. Refer to the Ansible Tower documentation for details on each type.

.PARAMETER Description
  Optional description of this credential.

.PARAMETER Name
  Name of this credential.

.PARAMETER Organization
  Inherit permissions from organization roles. If provided on creation, do not give either user or team.

.PARAMETER Id
  The ID of a specific AnsibleCredential to get

.PARAMETER AnsibleTower
  The Ansibl Tower instance to run against. If no value is passed the command will run against $Global:DefaultAnsibleTower.
#>

function Get-AnsibleCredential {
    [CmdletBinding(DefaultParameterSetname='PropertyFilter')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidGlobalVars", "Global:DefaultAnsibleTower")]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "CredentialType")]
    param(
        [Parameter(ParameterSetName='PropertyFilter')]
        [Object]$CredentialType,

        [Parameter(Position=2,ParameterSetName='PropertyFilter')]
        [String]$Description,

        [Parameter(Position=1,ParameterSetName='PropertyFilter')]
        [String]$Name,

        [Parameter(ParameterSetName='PropertyFilter')]
        [Object]$Organization,

        [Parameter(ParameterSetName='ById')]
        [Int32]$Id,

        [Parameter(ParameterSetName='ById')]
        [Switch]$UseCache,

        [Object]$AnsibleTower = $Global:DefaultAnsibleTower
    )
    end {
                $Filter = @{}
        if($PSBoundParameters.ContainsKey("CredentialType")) {
            switch($CredentialType.GetType().Fullname) {
                "AnsibleTower.CredentialType" {
                    $Filter["credential_type"] = $CredentialType.Id
                }
                "System.Int32" {
                    $Filter["credential_type"] = $CredentialType
                }
                "System.String" {
                    $Filter["credential_type__name"] = $CredentialType
                }
                default {
                    Write-Error "Unknown type passed as -CredentialType ($_). Supported values are String, Int32, and AnsibleTower.CredentialType." -ErrorAction Stop
                    return
                }
            }
        }

        if($PSBoundParameters.ContainsKey("Description")) {
            if($Description.Contains("*")) {
                $Filter["description__iregex"] = $Description.Replace("*", ".*")
            } else {
                $Filter["description"] = $Description
            }
        }

        if($PSBoundParameters.ContainsKey("Name")) {
            if($Name.Contains("*")) {
                $Filter["name__iregex"] = $Name.Replace("*", ".*")
            } else {
                $Filter["name"] = $Name
            }
        }

        if($PSBoundParameters.ContainsKey("Organization")) {
            switch($Organization.GetType().Fullname) {
                "AnsibleTower.Organization" {
                    $Filter["organization"] = $Organization.Id
                }
                "System.Int32" {
                    $Filter["organization"] = $Organization
                }
                "System.String" {
                    $Filter["organization__name"] = $Organization
                }
                default {
                    Write-Error "Unknown type passed as -Organization ($_). Supported values are String, Int32, and AnsibleTower.Organization." -ErrorAction Stop
                    return
                }
            }
        }

        if($id) {
            $CacheKey = "credentials/$Id"
            $AnsibleObject = $AnsibleTower.Cache.Get($CacheKey)
            if($UseCache -and $AnsibleObject) {
                Write-Debug "[Get-AnsibleCredential] Returning $($AnsibleObject.Url) from cache"
                $AnsibleObject
                return
            } else {
                $Return = Invoke-GetAnsibleInternalJsonResult -ItemType "credentials" -Id $Id -AnsibleTower $AnsibleTower
            }
        } else {
            $Return = Invoke-GetAnsibleInternalJsonResult -ItemType "credentials" -Filter $Filter -AnsibleTower $AnsibleTower
        }

        if(!($Return)) {
            return
        }
        foreach($ResultObject in $Return) {
            $JsonString = $ResultObject | ConvertTo-Json
            $AnsibleObject = [AnsibleTower.JsonFunctions]::ParseTocredential($JsonString)
            $AnsibleObject.AnsibleTower = $AnsibleTower
            $CacheKey = "credentials/$($AnsibleObject.Id)"
            Write-Debug "[Get-AnsibleCredential] Caching $($AnsibleObject.Url) as $CacheKey"
            $AnsibleTower.Cache.Add($CacheKey, $AnsibleObject, $Script:CachePolicy) > $null
            #Add to cache before filling in child objects to prevent recursive loop
            Write-Output $AnsibleObject
            $AnsibleObject = $Null
        }
    }
}