Apps/Get-TrackerSoftwarePDFXChangeEditor.ps1

function Get-TrackerSoftwarePDFXChangeEditor {
    <#
        .SYNOPSIS
            Returns the current version and download URL for the Tracker Software PDF-XChange Editor.

        .NOTES
            Site: https://stealthpuppy.com
            Author: Aaron Parker
            Twitter: @stealthpuppy
    #>

    [OutputType([System.Management.Automation.PSObject])]
    [CmdletBinding(SupportsShouldProcess = $False)]
    param (
        [Parameter(Mandatory = $False, Position = 0)]
        [ValidateNotNull()]
        [System.Management.Automation.PSObject]
        $res = (Get-FunctionResource -AppName ("$($MyInvocation.MyCommand)".Split("-"))[1])
    )

    try {
        [System.XML.XMLDocument] $xmlDocument = Invoke-WebRequestWrapper -Uri $res.Get.Update.Uri -Raw
    }
    catch [System.Exception] {
        throw "$($MyInvocation.MyCommand): failed to convert feed into an XML object with: $($_.Exception.Message)"
    }

    # Build an output object by selecting installer entries from the feed
    if ($xmlDocument -is [System.XML.XMLDocument]) {
        foreach ($bundle in $res.Get.Update.Bundles) {

            # Select the latest version
            $Item = $xmlDocument.TrackerUpdate.bundle | Where-Object { $_.id -eq $bundle }
            $Update = $Item.Update | `
                Sort-Object -Property @{ Expression = { [System.Version]$_.version }; Descending = $true } | `
                Select-Object -First 1

            # Construct the output; Return the custom object to the pipeline
            $PSObject = [PSCustomObject] @{
                Version      = $Update.version
                Hash         = $Update.hash
                Architecture = Get-Architecture -String $Update.Url
                Type         = $Update.type
                URI          = $res.Get.Download.Uri -replace "#filename", $Update.url
            }
            Write-Output -InputObject $PSObject
        }
    }
}