Functions/Public/content-management-service/Get-vRAPackage.ps1

function Get-vRAPackage {
<#
    .SYNOPSIS
    Retrieve vRA Packages
    
    .DESCRIPTION
    Retrieve vRA Packages
    
    .PARAMETER Id
    Specify the ID of a Package

    .PARAMETER Name
    Specify the Name of a Package

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

    .PARAMETER Page
    The index of the page to display.

    .INPUTS
    System.String
    System.Int

    .OUTPUTS
    System.Management.Automation.PSObject.

    .EXAMPLE
    Get-vRAPackage
    
    .EXAMPLE
    Get-vRAPackage -Id "b2d72c5d-775b-400c-8d79-b2483e321bae"

    .EXAMPLE
    Get-vRAPackage -Name "Package01","Package02"
#>

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

    Param (

        [Parameter(Mandatory=$true,ParameterSetName="ById")]
        [ValidateNotNullOrEmpty()]
        [String[]]$Id,         

        [Parameter(Mandatory=$true,ParameterSetName="ByName")]
        [ValidateNotNullOrEmpty()]
        [String[]]$Name,
        
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [Int]$Page = 1,

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [Int]$Limit = 100

    )

    # --- Test for vRA API version
    xRequires -Version 7.0
    
    try {                
        switch ($PsCmdlet.ParameterSetName) 
        { 
            "ById"  {                
                
                foreach ($PackageId in $Id){

                    $URI = "/content-management-service/api/packages/$($PackageId)"

                    # --- Run vRA REST Request
                    $Package = Invoke-vRARestMethod -Method GET -URI $URI -Verbose:$VerbosePreference    
                    
                    [PSCustomobject]@{

                        Name = $Package.name
                        Id = $Package.id                
                        Description = $Package.description
                        TenantId = $Package.tenantId
                        SubtenantId = $Package.subtenantId
                        Contents = $Package.contents
                        CreatedDate = $Package.createdDate
                        LastUpdated = $Package.lastUpdated
                        version = $Package.version
                    }
                }                              
            
                break
            }

            "ByName"  {                

               foreach ($PackageName in $Name){

                    $URI = "/content-management-service/api/packages?`$filter=name eq '$($PackageName)'"

                    $EscapedURI = [uri]::EscapeUriString($URI)

                    # --- Run vRA REST Request
                    $Response = Invoke-vRARestMethod -Method GET -URI $EscapedURI -Verbose:$VerbosePreference
                    
                    if (-not $Response.content){
                    
                        throw "Unable to retrieve Package with Name $($Name)"
                    }                  

                    foreach ($Package in $Response.content){

                        [PSCustomobject]@{

                            Name = $Package.name
                            Id = $Package.id                
                            Description = $Package.description
                            TenantId = $Package.tenantId
                            SubtenantId = $Package.subtenantId
                            Contents = $Package.contents
                            CreatedDate = $Package.createdDate
                            LastUpdated = $Package.lastUpdated
                            version = $Package.version
                        }
                    }
                }  
                
                break
            }

            "Standard"  {

                $URI = "/content-management-service/api/packages?limit=$($Limit)&page=$($Page)&`$orderby=name asc"

                $EscapedURI = [uri]::EscapeUriString($URI)

                $Response = Invoke-vRARestMethod -Method GET -URI $EscapedURI -Verbose:$VerbosePreference

                foreach ($Package in $Response.content){

                    [PSCustomobject]@{

                        Name = $Package.name
                        Id = $Package.id                
                        Description = $Package.description
                        TenantId = $Package.tenantId
                        SubtenantId = $Package.subtenantId
                        Contents = $Package.contents
                        CreatedDate = $Package.createdDate
                        LastUpdated = $Package.lastUpdated
                        version = $Package.version
                    }
                }

                Write-Verbose -Message "Total: $($Response.metadata.totalElements) | Page: $($Response.metadata.number) of $($Response.metadata.totalPages) | Size: $($Response.metadata.size)"
                
                break
            }
        }
    }
    catch [Exception]{

        throw
    }
}