PublicRoot/Get-WS1AppCatalog.ps1

<#
.SYNOPSIS
Get a Catalog Application information using Hash as a sorting filter.
 
.PARAMETER Tenant
Mandatory: WS1 Access Tenant URL
 
.PARAMETER Token
Mandatory: oAuth2 AccessToken
 
.PARAMETER Filter
Mandatory: HashTable format filter
 
.PARAMETER Property
Select a single property to be retrived
 
.EXAMPLE
Get-WS1AppCatalog "TestApp"
 
.EXAMPLE
Get-WS1AppCatalog TestApp -property UUID | Select-Object -ExpandProperty Data
 
.EXAMPLE
"TestApp" | Get-WS1AppCatalog
 
.EXAMPLE
Get-WS1AppCatalog -Filter @{"nameFilter" = "TestApp"; "includeAttributes" = @("labels","uiCapabilities","authInfo")}
 
.EXAMPLE
Get-WS1AppCatalog -Filter @{"nameFilter" = "TestApp"} | Select-Object @{Label = "UUID"; Expression = {$PSItem.Data.UUID}} | Select-Object -ExpandProperty UUID
 
.EXAMPLE
(Get-WS1AppCatalog "TestApp").Data.UUID
#>

function Get-WS1AppCatalog {
    [CmdletBinding(DefaultParameterSetName='AppName')]
    param(
        [Parameter(Mandatory=$true)][string]$Tenant,
        [Parameter(Mandatory=$true)][string]$Token,
        [Parameter(Mandatory=$true,ValueFromPipeline=$True,ParameterSetName='AppName',Position=0)][string]$AppName,
        [Parameter(Mandatory=$true,ParameterSetName='Filter')][Hashtable]$Filter,
        [string]$Property
    )
    Begin{
        $URI = "https://$($Tenant)/SAAS/jersey/manager/api/catalogitems/search"
        $Header = @{
            Host = $Tenant
            Authorization = "HZN $($Token)"
            'Content-Type' = 'application/vnd.vmware.horizon.manager.catalog.search+json'
            Accept = 'application/vnd.vmware.horizon.manager.catalog.item.list+json'
        }
        $IRMParams = @{
            Method = "POST"
            Headers = $Header
            Body = $false
            URI = $URI
        }
    }
    Process{
        Write-Debug "Body(Filter): $Body"
        Switch ($PSBoundParameters.Keys) {
            "AppName" {
                $Filter = @{"nameFilter" = $AppName}
                $IRMParams.Body = $Filter | ConvertTo-Json
                break;
             }
             "Filter" {
                $IRMParams.Body = $Filter | ConvertTo-Json
                break;
             }
        }
        Write-Debug $($IRMParams | out-string)
        try {
            $AppCatalog =  Invoke-RestMethod @IRMParams
            If($AppCatalog.items){
                $Result = @{ "Status" = $True; "Data" = $AppCatalog.items }
            }else {
                Write-Warning "Application not found - $($Filter.Values)"
                $Result = @{ "Status" = $false; "Data" = "N/A" }
            }
        }
        catch {
            Write-Verbose "$_.Exception.Message"
            $Result = @{ "Status" = $False; "Message" = $Error[0].Exception.Message }
        }
        If($property){
            Return $Result.Data."$($property)"
        }
        Return New-Object psobject -Property $Result
    }
}