我在PATH
变量中插入变量字符串。我按以下方式设置变量:
$var="MyTestPath"
$mypath=[environment]::GetEnvironmentVariable("PATH",[system.environmentvariabletarget]::User)
[environment]::SetEnvironmentVariable("TEST",$var,[system.environmentvariabletarget]::User)
[environment]::SetEnvironmentVariable("PATH",$mypath+";%TEST%",[system.environmentvariabletarget]::User)
以上代码对我不起作用。当我检查新shell中的路径时,%TEST%
变量不会自行扩展。它显示以%TEST%
结尾的新路径。当我从GUI或Windows shell提示符设置它时,这一直有效。当从PowerShell设置变量时,为什么这种行为会有所不同? PowerShell中是否删除了此功能?
我不希望执行以下操作,因为每次运行脚本时它都会继续将我的变量添加到路径中。
[environment]::SetEnvironmentVariable("PATH",$mypath+";"+$var,[system.environmentvariabletarget]::User)
答案 0 :(得分:3)
尝试更改此行:
[environment]::SetEnvironmentVariable("PATH",$mypath+";%TEST%",[system.environmentvariabletarget]::User)
使用:
$test =[environment]::GetEnvironmentVariable("test","user") # this retrieve the rigth variable value
[environment]::SetEnvironmentVariable("PATH", $mypath +";$test",[system.environmentvariabletarget]::User)
%test%
在powershell中没有任何意义,不能像在CMD中那样扩展。
$env:test
仅从系统环境变量而非用户
答案 1 :(得分:1)
您希望有效地设置使用REG_EXPAND_SZ的注册表值(对应于env var)。请参阅此post for details on how to do that。