I do a thing to install JDK when a Windows virtual machine boot, use a cloudinit user-data to transfer a PowerShell script to the windows machine, and run the script to install
Environment variables are stored in the registry. [Environment]::SetEnvironmentVariable()
writes the given variable as a REG_SZ
value, but for nested variables to be expanded you need a REG_EXPAND_SZ
value.
If you want to use %JAVA_HOME%\bin
in the PATH use Set-ItemProperty
instead of [Environment]::SetEnvironmentVariable()
:
$regkey = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
Set-ItemProperty -Path $regkey -Name 'Path' -Value $path -Type ExpandString
Beware that there may be other pitfalls when using nested variables in environment variables due to the order in which they're expanded. Raymond Chen described the behavior in the article Windows Confidential: The hidden variables.