0

我在我的变量中插入一个变量字符串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) 

上面的代码对我不起作用。%TEST%当我检查新 shell 中的路径时,变量不会自行扩展。它显示以 结尾的新路径%TEST%。当我从 GUI 或 Windows shell 提示符设置它时,这一直有效。当从 PowerShell 设置变量时,为什么这种行为会有所不同?PowerShell 中是否删除了此功能?

不想执行以下操作,因为每次运行脚本时它都会不断将我的变量添加到路径中。

[environment]::SetEnvironmentVariable("PATH",$mypath+";"+$var,[system.environmentvariabletarget]::User) 
4

2 回答 2

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仅从系统环境变量中检索,而不是从用户中检索

于 2012-09-26T05:24:53.197 回答
1

You're wanting to effectively set a registry value (that corresponds to a env var) that uses REG_EXPAND_SZ. See this post for details on how to do that.

于 2012-09-26T13:39:49.403 回答