从PowerShell设置时,为什么shell%variable%不起作用?

时间:2012-09-26 05:08:28

标签: powershell windows-shell

我在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) 

2 个答案:

答案 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