Windows user environment variable vs. system environment variable Windows user environment variable vs. system environment variable powershell powershell

Windows user environment variable vs. system environment variable


In PowerShell, there's no cmdlet for it, but you can use the underlying .NET methods in the Environment class:

Write-Host "Machine environment variables"[Environment]::GetEnvironmentVariables("Machine")Write-Host "User environment variables"[Environment]::GetEnvironmentVariables("User")# This should be the same as 'Get-ChildItem env:', although it isn't sorted.Write-Host "Process environment variables"[Environment]::GetEnvironmentVariables("Process")


Use the following batch file:

@echo offfor /f "tokens=3 usebackq" %%a in (`reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ^| findstr TEMP`)  do @echo System variable TEMP = %%afor /f "tokens=3 usebackq" %%a in (`reg query "HKEY_CURRENT_USER\Environment" ^| findstr TEMP`)  do @echo Current user variable TEMP = %%a

To use from a command line replace %% with %.

Output:

System variable TEMP = %SystemRoot%\TEMPCurrent user variable TEMP = %USERPROFILE%\AppData\Local\Temp

Note that the HKEY_CURRENT_USER takes precedance (but for some reason %USERPROFILE% is expanded to a shortname when evaluating %TEMP%):

echo %USERPROFILE%USERPROFILE=C:\Users\DavidPostillecho %TEMP%C:\Users\DAVIDP~1\AppData\Local\Temp