59

I am Trying To add a System Variable here using PowerShell:

Environment Var dialog

I have tried both ways using

$env:MyTestVariable = "My test variable."

and

[Environment]::SetEnvironmentVariable("TestVariableName", "My Value", "<option>")

However neither of them seem to add to this section. I have tried restarting the computer as well to see if it would take effect then. I have looked at technet along with countless other websites, but nothing I have tried has worked.

How can I set a system variable with PowerShell?

CJBS
  • 15,147
  • 6
  • 86
  • 135
Tyler S
  • 827
  • 1
  • 14
  • 23

3 Answers3

86

Run PowerShell as an administrator (to get the necessary registry access permissions) then call out to the .Net framework to set it:

[Environment]::SetEnvironmentVariable("MyTestVariable", "MyTestValue", "Machine")

NB. it won't take effect within the same process, you'll have to make a new PowerShell process to see it.

TessellatingHeckler
  • 27,511
  • 4
  • 48
  • 87
  • 4
    About the NB: if you have choco installed, you can run refreshenv to use the same powershell process ;) – Paul Melero Jul 30 '18 at 13:48
  • You *have to* use that that third parameter (`'Machine'`) to achieve what the original poster is attempting. – alex Sep 15 '22 at 17:00
  • 1
    As @gaspare Bonventre mention in its answer, it is better to use [System.EnvironmentVariableTarget]::Machine instead of "Machine" as third parameter – fred727 Nov 30 '22 at 13:00
24

Run PowerShell as an admin. Don't use this if you are trying to modify something like environmental extensions or environmental paths. No need to run refreshEnv and no need to open a new PowerShell window to see it

$variableNameToAdd = "mytestVariableName"
$variableValueToAdd = "some environmental value to add"
[System.Environment]::SetEnvironmentVariable($variableNameToAdd, $variableValueToAdd, [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable($variableNameToAdd, $variableValueToAdd, [System.EnvironmentVariableTarget]::Process)
[System.Environment]::SetEnvironmentVariable($variableNameToAdd, $variableValueToAdd, [System.EnvironmentVariableTarget]::User)
Gaspare Bonventre
  • 1,134
  • 11
  • 19
4

You can find a cool explanation of this below,

https://trevorsullivan.net/2016/07/25/powershell-environment-variables/

NIK
  • 1,089
  • 13
  • 22
  • Link is not working, do you have some spare? – JorgeM Jan 19 '22 at 16:14
  • Working archived link: https://web.archive.org/web/20210228001104/https://trevorsullivan.net/2016/07/25/powershell-environment-variables/ – JWCS Feb 23 '22 at 21:51