Public/JavaHelpers.psm1
Function Get-JavaVersions() { $versions = '', 'Wow6432Node\' | ForEach-Object {Get-ItemProperty -Path HKLM:\SOFTWARE\$($_)Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object {($_.DisplayName -like '*Java *') -and (-not $_.SystemComponent)} | Select-Object DisplayName, DisplayVersion, InstallLocation, @{n = 'Architecture'; e = {If ($_.PSParentPath -like '*Wow6432Node*') {'x86'} Else {'x64'}}}} return $versions } Function Get-JavaInstallationPath { param ( [version] $toVersion ) $versions_ = Get-JavaVersions $foundRightVersion = $false $JavaInstallPath = "" foreach ($version_ in $versions_) { try { $version = New-Object System.Version($version_.DisplayVersion) } catch { continue } if ($version.CompareTo($toVersion) -ge 0) { $foundRightVersion = $true $JavaInstallPath = $version_.InstallLocation break; } } if (-not $foundRightVersion) { throw "Invalid Java version. Expected $JavaMinVersionRequired or above." } return $JavaInstallPath } Function Set-JavaHome { param ( [Version] $JavaMinVersionRequired ) $JREPath = Get-JavaInstallationPath($JavaMinVersionRequired) $jreVal_ = [Environment]::GetEnvironmentVariable("JAVA_HOME", [EnvironmentVariableTarget]::Machine) if($jreVal_ -ne $JREPath) { Write-Host "Setting JAVA_HOME environment variable" [Environment]::SetEnvironmentVariable("JAVA_HOME", $JREPath, [EnvironmentVariableTarget]::Machine) # Fixed known issue: error finding keytool $jreVal_ = $JREPath } return $jreVal_ } Function Get-JavaKeytool { param ( [string] $JavaMinVersionRequired = "8.0.1510" ) $RequiredVersion = New-Object System.Version($JavaMinVersionRequired) try { $jreVal = Set-JavaHome -JavaMinVersionRequired $RequiredVersion $path = $jreVal + '\bin\keytool.exe' if (Test-Path $path) { $keytool_ = (Get-Command $path).Source } } catch { $keytool_ = Read-Host "keytool.exe not on path. Enter path to keytool (found in JRE bin folder)" } if([string]::IsNullOrEmpty($keytool_) -or -not (Test-Path $keytool_)) { throw "Keytool path was invalid." } return $keytool_ } function Install-Java { Param( [string]$toolName, [string]$toolFolder, [string]$toolZip, [string]$toolSourceFile, [string]$installRoot ) if(!(Test-Path -Path $toolFolder)) { if(!(Test-Path -Path $toolZip)) { Write-Host "Downloading $toolName..." Start-BitsTransfer -Source $toolSourceFile -Destination $toolZip } Write-Host "Extracting $toolName to $toolFolder..." Expand-Archive $toolZip -DestinationPath $installRoot } } |