【问题标题】:Setting environment variables as dependent on other env vars on windows via powershell通过powershell将环境变量设置为依赖于windows上的其他环境变量
【发布时间】:2021-08-21 09:49:04
【问题描述】:

我想设置一个变量 JAVA_HOME 来动态假设另一个变量的值 JAVA_HOME_x64..这样每当 JAVA_HOME_x64 更改并创建新的终端会话时,JAVA_HOME 就会被分配 JAVA_HOME_x64 的值。

在 powershell 中,我执行以下操作...

[System.Environment]::SetEnvironmentVariable('JAVA_HOME', '%JAVA_HOME_x64%', 'Machine');
[System.Environment]::SetEnvironmentVariable('JAVA_HOME_x64', 'c:\myjava', 'Machine');
[System.Environment]::GetEnvironmentVariable('JAVA_HOME', 'Machine') ==> returns %JAVA_HOME_x64% 

当我打开一个新的命令提示符并键入 set(或 echo %JAVA_HOME%)时,它显示 JAVA_HOME 的值为 %JAVA_HOME_x64% 而不是 c:\myjava。

但是,如果我转到 UI(如下所示)并手动编辑(删除并重新创建)JAVA_HOME 并将其值重置为 %JAVA_HOME_x64%,然后当启动新的命令提示符/终端会话时,它现在将 JAVA_HOME 的值显示为c:\myjava..为什么会这样?有任何想法吗?如何通过 PowerShell 命令实现与 UI 中相同的行为。

经过一番调查,我意识到,通过上述 powershell 命令行为所述变量创建的注册表项(在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 中)是 REG_SZ 类型,而通过 UI 创建的那个是 REG_EXPAND_SZ。这也许是线索

【问题讨论】:

  • 我尝试查看此stackoverflow.com/questions/50607618/…,但它仍然不适合我。
  • 但是请注意,如果我使用“以管理员身份运行”打开命令提示符,它似乎工作正常。
  • 我认为这个问题需要更正。 JAVA_HOME 未在命令中设置为 c:\myjava。另外,您的意思是“任何新的”命令是什么?请更新问题并分享更多信息。
  • @alexzelaya,我想将 JAVA_HOME 动态设置为 JAVA_HOME_x64 的值,即如果 JAVA_HOME_x64 将来发生变化,JAVA_HOME 将自动更新。
  • 这不会反映在您的问题的任何地方。 stackoverflow.com/help/how-to-ask

标签: windows powershell environment-variables


【解决方案1】:

以下工作..

Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' 'JAVA_HOME' '%JAVA_HOME_x64%' -Type 'ExpandString'

[System.Environment]::SetEnvironmentVariable('JAVA_HOME_x64','c:\program files\Zulu\jre','Machine')

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2016-01-11
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多