Apps/Get-OracleJava8.ps1

Function Get-OracleJava8 {
    <#
        .SYNOPSIS
            Gets the current available Oracle Java release versions.
 
        .NOTES
            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]),

        [Parameter(Mandatory = $False, Position = 1)]
        [ValidateNotNull()]
        [System.String] $Filter
    )

    # Read the update RSS feed
    $params = @{
        Uri = $res.Get.Update.Uri
    }
    $UpdateFeed = Invoke-RestMethodWrapper @params

    If ($Null -ne $UpdateFeed) {

        # Latest version is the last item in the feed
        # Can't cast $_.version to [System.Version] because underscore character is in the string
        $Count = $UpdateFeed.'java-update-map'.mapping.Count
        Write-Verbose -Message "$($MyInvocation.MyCommand): Filter $Count items in feed for latest update."
        $latestUpdate = $UpdateFeed.'java-update-map'.mapping | Where-Object { $_.url -notlike "*-cb.xml" } | Select-Object -Last 1

        # Read the XML listed in the most recent update
        $params = @{
            Uri = $latestUpdate.url
        }
        $Feed = Invoke-RestMethodWrapper @params

        If ($Null -ne $Feed) {

            # Select the update info
            Write-Verbose -Message "$($MyInvocation.MyCommand): Select item in feed for $($res.Get.Update.Filter)."
            $Update = $Feed.'java-update'.information | Where-Object { $_.lang -eq $res.Get.Update.Filter } | Select-Object -First 1

            # Construct the output; Return the custom object to the pipeline
            ForEach ($item in $res.Get.Update.FileStrings.GetEnumerator()) {
                Write-Verbose -Message "$($MyInvocation.MyCommand): Build object for $($item.Name)."
                $PSObject = [PSCustomObject] @{
                    Version      = $($Update.version | Select-Object -Last 1)
                    Architecture = $item.Name
                    URI          = $Update.url -replace $res.Get.Update.ReplaceText, $res.Get.Update.FileStrings[$item.Key]
                }
                Write-Output -InputObject $PSObject
            }
        }
    }
}