Rob Wiley
Rob Wiley

Reputation: 85

How do I update Windows path WITHOUT losing the original embedded environment variables

Windows 2008R2 Powershell v2.0

Original Path (as seen from Advanced System Settings/Environment Variables) is:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

From Powershell I run:

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

or

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

Now my path (as seen from Advanced System Settings/Environment Variables) is:

C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Temp

Is there a way to retrieve the existing path WITHOUT evaluating it so that I can retain the existing environment variables embedded in the original path?

Upvotes: 2

Views: 1165

Answers (4)

mjolinor
mjolinor

Reputation: 68263

Kind of medieval, but seems to work:

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

Upvotes: 3

Matt
Matt

Reputation: 1969

I'm not sure there is - I tried this:

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

to see if it was related to environment variables or something else.

I guess it's the way it's compiled on the command line. All variables are evaluated before the whole expression is evaluated. So the end results doesn't know the working gone into it.

Upvotes: -1

Michael Kennedy
Michael Kennedy

Reputation: 3380

Try this (after converting to PS):

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

Upvotes: 0

Russ Clarke
Russ Clarke

Reputation: 17909

I think the problem is how PS is getting the environment variable;

This S/O post might contain the answer for you (hopefully!):

PowerShell: Get 'tmp' environment variable raw value

Upvotes: 1

Related Questions