Public/Tasks/Invoke-EnsureJavaHomeTask.ps1

#Requires -Modules SitecoreInstallFramework, SitecoreFundamentals

Set-StrictMode -Version Latest

Write-Verbose "Loading $($MyInvocation.MyCommand.Path)"

Function Invoke-EnsureJavaHomeTask {
    [CmdletBinding()]
    param
    (
        [string]$TaskName = "EnsureJavaHome"
    )

    Set-PSDebug -Strict

    if (Test-Path "HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment") {

        $jreversion = (Get-ItemProperty -Path "HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment" -Name CurrentVersion).CurrentVersion
        $jrehome = (Get-ItemProperty -Path "HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment\$jreversion" -Name JavaHome).JavaHome

        if ($PSCmdlet.ShouldProcess($jrehome)) {

            # Ensure Java environment variable
            $jrehomeenv = [Environment]::GetEnvironmentVariable("JAVA_HOME", [EnvironmentVariableTarget]::Machine)
            if ($jrehome -ne $jrehomeenv) {
                Write-Verbose "Setting JAVA_HOME environment variable"
                [Environment]::SetEnvironmentVariable("JAVA_HOME", $jrehome, [EnvironmentVariableTarget]::Machine)
                Write-TaskInfo "SET JAVA_HOME environment variable to $jrehome" -Tag Java -TaskName $TaskName
            }
            else {
                Write-TaskInfo "JAVA_HOME matches currenly installed version of Java: $jrehome" -Tag Java -TaskName $TaskName
            }
        }

    }
    else {
        throw 'Could not set JAVA_HOME environment variable. Java is not installed.'
    }
}

Register-SitecoreInstallExtension -Command Invoke-EnsureJavaHomeTask -As EnsureJavaHome -Type Task -Force

Write-Verbose "Loaded $($MyInvocation.MyCommand.Path)"