如何在不丢失原始嵌入式环境变量的情况下更新Windows路径

时间:2011-06-01 00:03:23

标签: powershell environment-variables

Windows 2008R2 Powershell v2.0

原始路径(从高级系统设置/环境变量中可以看到)是:

  

%SYSTEMROOT%\ SYSTEM32;%SYSTEMROOT%;%SYSTEMROOT%\ System32下\ WBEM;%SYSTEMROOT%\ System32下\ WindowsPowerShell \ V1.0 \

从Powershell我跑:

[Environment]::SetEnvironmentVariable("PATH", "$($env:path;C:\Temp", "Machine")

[Environment]::SetEnvironmentVariable("PATH", "$($([Environment]::GetEnvironmentVariable('PATH', 'MACHINE')));C:\Temp", "Machine")

现在我的路径(从高级系统设置/环境变量中看到)是:

  

C:\ Windows \ System32下; C:\视窗; C:\ Windows \ System32下\ WBEM; C:\ Windows \ System32下\ WindowsPowerShell \ V1.0 \; C:\温度

有没有办法检索现有路径而不评估它,以便我可以保留原始路径中嵌入的现有环境变量?

4 个答案:

答案 0 :(得分:3)

有点中世纪,但似乎有效:

(((reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment") |
  select-string "\s+path\s+REG_EXPAND_SZ").line -split "    ")[3]

答案 1 :(得分:1)

认为问题是PS如何获取环境变量;

这个S / O帖子可能包含你的答案(希望如此!):

PowerShell: Get 'tmp' environment variable raw value

答案 2 :(得分:0)

尝试此操作(转换为PS后):

string originalPath = Environment.GetEnvironmentVariable("PATH");
string path = originalPath + ";" + "NEW_PATH_BIT";
Environment.SetEnvironmentVariable("PATH", path);

答案 3 :(得分:-1)

我不确定是否有 - 我试过这个:

PS C:\> $string1 = " World"
PS C:\> $string2 = "Hello$string1"
PS C:\> $string2
Hello World

查看它是否与环境变量或其他内容有关。

我猜这是在命令行上编译的方式。在评估整个表达式之前评估所有变量。所以最终的结果并不知道进入它的工作。