Public/Get-AdobeAcrobatReaderDC.ps1

Function Get-AdobeAcrobatReaderDC {
    <#
        .SYNOPSIS
            Gets the download URLs for Adobe Acrobat Reader DC Continuous track installers.
 
        .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.Download.Platforms) {
        ForEach ($language in $res.Get.Download.Languages) {
            Write-Verbose -Message "$($MyInvocation.MyCommand): Searching download language: [$language]."
            $Uri = $res.Get.Download.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.Download.Headers
                UserAgent       = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
                UseBasicParsing = $True
                ErrorAction     = $script:resourceStrings.Preferences.ErrorAction
            }
            # TODO: revert back to Invoke-WebRequestWrapper
            #$Content = Invoke-WebRequestWrapper @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
                    Type     = "Installer"
                    Language = $language
                    URI      = $downloadURI
                }
                Write-Output -InputObject $PSObject
            }
        }
    }
    #endregion

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

    # Construct update download list
    If ($Null -ne $Content) {
        
        ForEach ($update in $res.Get.Download.Updates.GetEnumerator()) {
            Write-Verbose -Message "$($MyInvocation.MyCommand): Searching updates: [$($update.Name)]."

            # Output objects
            $PSObject = [PSCustomObject] @{
                Version  = $Content
                Type     = "Updater"
                Language = $update.Name
                URI      = $res.Get.Download.Updates[$update.key] -replace $res.Get.Download.ReplaceText, ($Content.Replace(".", ""))
            }
            Write-Output -InputObject $PSObject
        }
    }
    Else {
        Write-Warning -Message "$($MyInvocation.MyCommand): unable to retrieve content from $($res.Get.Update.Uri)."
    }
    #endregion
}