Functions/Public/Get-vRAEntitledCatalogItem.psm1

function Get-vRAEntitledCatalogItem {
<#
    .SYNOPSIS
    Get the a catalog item that the user is entitled to see
    
    .DESCRIPTION
    API for administrators to interact with catalog items that they are entitled to. Consumer Entitled CatalogItem(s) are basically catalog items:
    - in an active state.
    - the current user has the right to consume.
    - the current user is entitled to consume.
    - associated to a service.
    
    .PARAMETER Name
    The name of the catalog item

    .PARAMETER Limit
    The number of entries returned per page from the API. This has a default value of 100.

    .INPUTS
    System.String

    .OUTPUTS
    System.Management.Automation.PSObject

    .EXAMPLE
    Get-vRAEntitledCatalogItem
    
    .EXAMPLE
    Get-vRAEntitledCatalogItem -Limit 9999
    
    .EXAMPLE
    Get-vRAEntitledCatalogItem -Id dab4e578-57c5-4a30-b3b7-2a5cefa52e9e

    .EXAMPLE
    Get-vRAEntitledCatalogItem -Name Centos_Template
    
#>

[CmdletBinding(DefaultParameterSetName="Standard")][OutputType('System.Management.Automation.PSObject')]

    Param (
        
    [parameter(Mandatory=$true,ValueFromPipeline=$false,ParameterSetName="ByID")]
    [ValidateNotNullOrEmpty()]
    [String[]]$Id,         

    [parameter(Mandatory=$true,ValueFromPipeline=$false,ParameterSetName="ByName")]
    [ValidateNotNullOrEmpty()]
    [String[]]$Name, 
    
    [parameter(Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [String]$Limit = "100" 
    
    )
    
    try {

        switch ($PsCmdlet.ParameterSetName) {

            # --- Get catalog item by id
            'ById' {
            
                foreach ($EntitledCatalogItemId in $Id) {

                    $URI = "/catalog-service/api/consumer/entitledCatalogItems/$($EntitledCatalogItemId)"

                    Write-Verbose -Message "Preparing GET to $($URI)"    
                
                    $Response = Invoke-vRARestMethod -Method GET -URI $URI

                    Write-Verbose -Message "SUCCESS"
                      
                    [pscustomobject] @{

                        Id = $Response.catalogItem.id
                        Name = $Response.catalogItem.name
                        Description = $Response.catalogItem.description
                        Status = $Response.catalogItem.status
                        IsNoteworthy = $Response.catalogItem.isNoteworthy
                        DateCreated = $Response.catalogItem.dateCreated
                        LastUpdatedDate = $Response.catalogItem.lastUpdatedDate
                        Organization = $Response.catalogItem.organization
                        OutputResourceTypeRef = $Response.catalogItem.outputResourceTypeRef
                        ProviderBinding = $Response.catalogItem.providerBinding
                        ServiceRef = $Response.catalogItem.serviceRef
                        Quota = $Response.catalogItemquota
                        Version = $Response.catalogItem.version
                        Requestable = $Response.catalogItem.requestable
                        Callbacks = $Response.catalogItem.callbacks
                        CatalogItemTypeRef = $Response.catalogItem.catalogitemTypeRef
                        Forms = $Response.catalogItem.forms
                        IconId = $Response.catalogItem.iconId
                        EntitledOrganizations = $Response.entitledOrganizations 
               
                    }
                }

                break
                             
            }       
            # --- Get catalog item by name
            'ByName' {
        
                foreach ($EntitledCatalogItemName in $Name) { 
            
                    $URI = "/catalog-service/api/consumer/entitledCatalogItems?`$filter=name%20eq%20'$($EntitledCatalogItemName)'"            
            
                    Write-Verbose -Message "Preparing GET to $($URI)"                

                    $Response = Invoke-vRARestMethod -Method GET -URI "$($URI)"

                    Write-Verbose -Message "SUCCESS"

                    if ($Response.content.Length -eq 0) {

                        throw "Could not find catalog item with name: $($EntitledCatalogItemName)"

                    }

                    [pscustomobject] @{

                        Id = $Response.content.catalogItem.id
                        Name = $Response.content.catalogItem.name
                        Description = $Response.content.catalogItem.description
                        Status = $Response.content.catalogItem.status
                        IsNoteworthy = $Response.content.catalogItem.isNoteworthy
                        DateCreated = $Response.content.catalogItem.dateCreated
                        LastUpdatedDate = $Response.content.catalogItem.lastUpdatedDate
                        Organization = $Response.content.catalogItem.organization
                        OutputResourceTypeRef = $Response.content.catalogItem.outputResourceTypeRef
                        ProviderBinding = $Response.content.catalogItem.providerBinding
                        ServiceRef = $Response.content.catalogItem.serviceRef
                        Quota = $Response.content.catalogItem.quota
                        Version = $Response.content.catalogItem.version
                        Requestable = $Response.content.catalogItem.requestable
                        Callbacks = $Response.content.catalogItem.callbacks
                        CatalogItemTypeRef = $Response.content.catalogItem.catalogitemTypeRef
                        Forms = $Response.content.catalogItem.forms
                        IconId = $Response.content.catalogItem.iconId
                        EntitledOrganizations = $Response.content.entitledOrganizations               
                    }
                }

                break

            }
            # --- No parameters passed so return all catalog items
            'Standard' {
            
                $URI = "/catalog-service/api/consumer/entitledCatalogItems?limit=$($Limit)"        
                
                Write-Verbose -Message "Preparing GET to $($URI)"   

                $Response = Invoke-vRARestMethod -Method GET -URI $URI

                Write-Verbose -Message "SUCCESS"

                Write-Verbose -Message "Response contains $($Response.content.Length) records"

                foreach ($CatalogItem in $Response.content) {

                    [pscustomobject] @{

                        Id = $CatalogItem.catalogItem.id
                        Name = $CatalogItem.catalogItem.name
                        Description = $CatalogItem.catalogItem.description
                        Status = $CatalogItem.catalogItem.status
                        IsNoteworthy = $CatalogItem.catalogItem.isNoteworthy
                        DateCreated = $CatalogItem.catalogItem.dateCreated
                        LastUpdatedDate = $CatalogItem.catalogItem.lastUpdatedDate
                        Organization = $CatalogItem.catalogItem.organization
                        OutputResourceTypeRef = $CatalogItem.catalogItem.outputResourceTypeRef
                        ProviderBinding = $CatalogItem.catalogItem.providerBinding
                        ServiceRef = $CatalogItem.catalogItem.serviceRef
                        Quota = $CatalogItem.catalogItem.quota
                        Version = $CatalogItem.catalogItem.version
                        Requestable = $CatalogItem.catalogItem.requestable
                        Callbacks = $CatalogItem.catalogItem.callbacks
                        CatalogItemTypeRef = $CatalogItem.catalogItem.catalogitemTypeRef
                        Forms = $CatalogItem.catalogItem.forms
                        IconId = $CatalogItem.catalogItem.iconId
                        EntitledOrganizations = $CatalogItem.entitledOrganizations
                
                    }                
                }
                
                break            
            } 
        }           
    }
    catch [Exception]{
        
        throw

    }                                  
}