Я могу легко создать переменную среды пользователя в скрипте Powershell (Windows 10).
[System.Environment]::SetEnvironmentVariable('name', 'value', 'User')
Когда переменная должна содержать другуюпеременная окружения пользователя как %OTHERVAR%;static_part
, я обнаружил, что тип должен быть ExpandString
.Это можно сделать следующим образом:
Set-ItemProperty HKCU:\Environment 'name' 'value' -Type ExpandString
Итак, я написал следующий код
[System.Environment]::SetEnvironmentVariable('M2_HOME', 'C:\dev\app\apache-maven-3.3.9', 'User')
# special treatment to get expandable type
Set-ItemProperty HKCU:\Environment 'PATH' '%M2_HOME%\bin;C:\Users\UID20852\AppData\Local\Microsoft\WindowsApps;' -Type ExpandString
Write-Host ([System.Environment]::GetEnvironmentVariable('M2_HOME', 'User'))
Write-Host ([System.Environment]::GetEnvironmentVariable('PATH', 'User'))
Write-Host
Вывод:
C:\dev\app\apache-maven-3.3.9
C:\dev\app\apache-maven-3.3.9\bin;C:\Users\UID20852\AppData\Local\Microsoft\WindowsApps;
Все выглядит хорошо, обе переменные существуют,Когда я открываю элемент управления Windows для редактирования переменных среды пользователя, я вижу обе переменные, и значение PATH расширяется.Даже в regedit
я вижу, что тип переменных правильный.
Однако, когда я открываю новый cmd
и пытаюсь запустить двоичный файл с %M2_HOME%\bin
(должен быть на PATH
сейчас), он завершается неудачей .
Чтобы решить проблему вручную, мне просто нужно открыть элемент управления Windows для редактирования переменных среды пользователя, дважды щелкнуть по переменной PATH
, ничего не редактировать и снова закрыть ее (ядумаю, он переписывает это).
Затем в новом cmd
я могу запустить двоичные файлы из %M2_HOME%\bin
.
Есть идеи, как заставить эту PATH
переменную работать только через скрипт?