Public/Get-AdobeAcrobatReaderDC.ps1

Function Get-AdobeAcrobatReaderDC {
    <#
        .SYNOPSIS
            Gets the download URLs for Adobe Reader DC Continuous track installers.

        .DESCRIPTION
            Gets the download URLs for Adobe Reader DC Continuous track installers for the latest version for Windows and macOS.

        .NOTES
            Author: Aaron Parker
            Twitter: @stealthpuppy
        
        .LINK
            https://github.com/aaronparker/Evergreen

        .EXAMPLE
            Get-AdobeAcrobatReaderDC

            Description:
            Returns an array with version, installer type, language and download URL for Windows.
    #>

    [OutputType([System.Management.Automation.PSObject])]
    [CmdletBinding()]
    Param()

    # Get application resource strings from its manifest
    $res = Get-FunctionResource -AppName ("$($MyInvocation.MyCommand)".Split("-"))[1]
    Write-Verbose -Message $res.Name

    #region Installer downloads
    ForEach ($platform in $res.Get.Platforms) {
        ForEach ($language in $res.Get.Languages) {
            Write-Verbose -Message "Searching: [$($platform.platform_type)] [$language]"
            $Uri = $res.Get.Uri -replace "#Platform", $platform.platform_type
            $Uri = $Uri -replace "#Dist", $platform.platform_dist
            $Uri = $Uri -replace "#Language", $language
            $Uri = $Uri -replace "#Arch", $platform.platform_arch
            $Uri = $Uri -replace " ", "%20"
            $iwcParams = @{
                Uri             = $Uri
                Headers         = $res.Get.Headers
                UserAgent       = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
                UseBasicParsing = $True
                ErrorAction     = $script:resourceStrings.Preferences.ErrorAction
            }
            #$Content = Invoke-WebContent @iwcParams
            $Content = Invoke-WebRequest @iwcParams

            If ($Null -ne $Content) {
                #$ContentFromJson = $Content | ConvertFrom-Json
                $ContentFromJson = $Content.Content | ConvertFrom-Json
                
                # Check properties if multiple values returned
                If ($ContentFromJson.version.Count -eq 1) { $Version = $ContentFromJson.Version } Else { $Version = $ContentFromJson.Version | Select-Object -First 1 }
                If ($ContentFromJson.download_url.Count -eq 1) { $downloadURI = $ContentFromJson.download_url } Else { $downloadURI = $ContentFromJson.download_url | Select-Object -First 1 }
                $PSObject = [PSCustomObject] @{
                    Version  = $Version
                    Platform = $platform.platform_type
                    Type     = "Installer"
                    Language = $language
                    URI      = $downloadURI
                }
                Write-Output -InputObject $PSObject
            }
        }
    }
    #endregion

    #region Update downloads
    $iwcParams = @{
        Uri         = $res.Get.UpdateUri
        ContentType = $res.Get.UpdateContentType
    }
    $Content = Invoke-WebContent @iwcParams

    # Construct update download list
    If ($Null -ne $Content) {
        $versionString = $Content.Replace(".", "")
        ForEach ($platform in $res.Get.UpdatePlatforms) {
            Switch ($platform) {
                "win" {
                    $updateUrl = $res.Get.UpdateDownloadUri -replace "#Platform", $platform
                    $PSObject = [PSCustomObject] @{
                        Version  = $Content
                        Platform = "Windows"
                        Type     = "Updater"
                        Language = "Neutral"
                        URI      = "$($updateUrl)$($versionString)/AcroRdrDCUpd$($versionString).msp"
                    }
                    Write-Output -InputObject $PSObject
                    $PSObject = [PSCustomObject] @{
                        Version  = $Content
                        Platform = "Windows"
                        Type     = "Updater"
                        Language = "Multi"
                        URI      = "$($updateUrl)$($versionString)/AcroRdrDCUpd$($versionString)_MUI.msp"
                    }
                    Write-Output -InputObject $PSObject
                }
                "mac" {
                    $updateUrl = $res.Get.UpdateDownloadUri -replace "#Platform", $platform
                    $PSObject = [PSCustomObject] @{
                        Version  = $Content
                        Platform = "Macintosh"
                        Type     = "Installer"
                        Language = "Multi"
                        URI      = "$($updateUrl)$($versionString)/AcroRdrDC_$($versionString)_MUI.dmg"
                    }
                    Write-Output -InputObject $PSObject
                    $PSObject = [PSCustomObject] @{
                        Version  = $Content
                        Platform = "Macintosh"
                        Type     = "Updater"
                        Language = "Multi"
                        URI      = "$($updateUrl)$($versionString)/AcroRdrDCUpd$($versionString)_MUI.dmg"
                    }
                    Write-Output -InputObject $PSObject
                    $PSObject = [PSCustomObject] @{
                        Version  = $Content
                        Platform = "Macintosh"
                        Type     = "Updater"
                        Language = "Multi"
                        URI      = "$($updateUrl)$($versionString)/AcroRdrDCUpd$($versionString)_MUI.pkg"
                    }
                    Write-Output -InputObject $PSObject
                }
            }
        }
    }
    Else {
        Write-Warning -Message "$($MyInvocation.MyCommand): unable to find Adobe Acrobat Reader DC version."
    }
    #endregion
}