Установка переменных среды в зависимости от других переменных env в Windows через powershell

Я хочу установить переменную, скажем, 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 (или эхо% JAVA_HOME%), она показывает мне значение JAVA_HOME как% JAVA_HOME_x64%, а не c: \ myjava.

Однако, если я перейду в пользовательский интерфейс (как показано ниже) и вручную отредактирую (удалите и воссоздаю) JAVA_HOME и сброшу его значение на% JAVA_HOME_x64%, а затем при запуске новой командной строки / сеанса терминала теперь отображается значение JAVA_HOME как c: \ myjava..Почему? Любые идеи? Как добиться того же поведения, что и в пользовательском интерфейсе, с помощью команд PowerShell. Установить переменную среды вручную через пользовательский интерфейс

После некоторого расследования я понял, что ключ реестра (в Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment), созданный с помощью указанной выше командной строки PowerShell для указанной переменной, имеет тип REG_SZ, а тот, который создается через пользовательский интерфейс, — REG_EXPAND_SZ. Это может быть ключ к разгадке

Я попытался взглянуть на эту stackoverflow. com / questions / 50607618 /, но у меня все равно не работает.   —  person hardeep    schedule 03.06.2021

Однако, пожалуйста, обратите внимание, что если я открываю командную строку с помощью Run As Admnistrator, похоже, все работает нормально.   —  person hardeep    schedule 03.06.2021

Думаю, вопрос требует некоторой поправки. JAVA_HOME не установлен в c:\myjava в командах. Кроме того, какие команды вы имеете в виду, какие новые? Обновите вопрос и поделитесь дополнительной информацией.   —  person hardeep    schedule 03.06.2021

См. также:  Вызов функции Flutter Cloud с параметрами

@alexzelaya, я хочу динамически установить JAVA_HOME на значение JAVA_HOME_x64, т.е. если JAVA_HOME_x64 изменится в будущем, JAVA_HOME обновится автоматически.   —  person hardeep    schedule 03.06.2021

Это нигде не отражено в вашем вопросе. stackoverflow.com/help/how-to-ask   —  person hardeep    schedule 03.06.2021

Кроме того, в Windows нет собственного способа настройки динамической переменной среды. Это должно быть сделано через какой-то другой механизм; GPO, планировщик задач и т. Д.   —  person hardeep    schedule 03.06.2021

это работает, если я установил точно такое же значение, то есть% JAVA_HOME_x64% через пользовательский интерфейс для переменной JAVA_HOME.   —  person hardeep    schedule 03.06.2021

Пожалуйста, уделите необходимое время, чтобы рассмотреть свой вопрос. Непонятно, о чем вы спрашиваете.   —  person hardeep    schedule 03.06.2021

Результирующая запись реестра должна иметь тип REG_EXPAND_SZ.   —  person hardeep    schedule 03.06.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. hardeep

    Следующее сработало ..

    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')
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: