PublicRoot/Export-WS1AppCatalog.ps1

<#
.SYNOPSIS
Export catalog application to a ZIP file.
Similar to the "More->Export" funcution in Admin UI.
 
.PARAMETER Tenant
Mandatory: WS1Access Tenant.
 
.PARAMETER Token
Mandatory: oAuth2 AccessToken
 
.PARAMETER SaveTo
Mandatory: Path to save the downloaded file.
 
.EXAMPLE
Export-WS1AppCatalog -Tenant "example.vmware.com" -Token $Token -AppUUID "xxxx-f6da-xxxx-b813-xxx2e31e" -SaveTo "C:\temp\example.zip"
 
.EXAMPLE
$TestAppUUID = Get-WS1AppCatalog -Filter @{ "nameFilter" = "board-mvc-saml" }
Export-WS1AppCatalog -AppUUID $TestAppUUID.uuid -SaveTo "C:\Backup\$($TestAppUUID.name).zip"
 
.EXAMPLE
Get-WS1AppCatalog -Filter @{ "nameFilter" = "OpenID TestApp" } | Select-Object -ExpandProperty UUID | Export-WS1AppCatalog -SaveTo "C:\Backup\OpenID TestApp.zip"
 
#>

Function Export-WS1AppCatalog{
    [cmdletbinding()]
    param(
        [Parameter(Mandatory=$true)][string]$Tenant,
        [Parameter(Mandatory=$true)][string]$Token,
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)][Guid]$AppUUID,
        [Parameter(Mandatory=$true)][System.IO.FileInfo]$SaveTo
    )
    begin {
        $Header = @{
            Authorization = "HZN $($Token)"
            Accept = "application/zip"
            'Accept-Encoding' = "gzip, deflate, br"
        }
        $Body = @{
            useAbsoluteUrl = "true"
            '_t' = ""
            locale = "en"
        }
        $URL = "https://$($Tenant)/SAAS/jersey/manager/api/catalogitems/"
    }
    Process {
        $URI = $URL + "$($AppUUID)"
        $Now = [Math]::Floor([decimal](Get-Date(Get-Date).ToUniversalTime()-uformat "%s"))
        $Body.'_t' = $Now
        $IRMParams = @{
            Method = 'GET'
            Headers = $Header
            Body = $Body
            URI = $URI
            OutFile = $SaveTo
        }
        Write-Debug $($IRMParams | out-string)
        try {
            Invoke-WebRequest @IRMParams
            $Result = @{ "Status" = $True; "Message" = "Application successfully exported" }
        }
        catch {
            Write-Verbose "$_.Exception.Message"
            $Result = @{ "Status" = $False; "Message" = $Error[0].Exception.Message }
        }
        Return New-Object psobject -Property $Result
    }
}