Open regedit.exe
, navigate to HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
. Create two environment variables:
Name Type Data
----- -------------- -----------
zbar REG_SZ water
zfoo REG_EXPAND_SZ %zbar%
Open new cmd.exe
, powershell.exe
or whatever. These variables are missing. Make LogOff, then LogOn. In cmd.exe
window type echo %zbar%
- water
is displayed. Type echo %zfoo%
and %zbar%
is displayed, but I expect to see expanded value - water
.
And now. Open Windows Environment Variables dialog. Alter or create any variable (for example zzz=zzz
). Reopen cmd.exe
and type echo %zfoo%
- now you see water
!
Actually, I am creating these variables with PowerShell script. But all this script does is described registry manipulations.
Questions:
- How to force
zfoo
variable to have a correct value without that magic with opening Windows Environment Variables dialog and altering some variables? Maybe I should call some API, something like[Microsoft.Win32.Registry]::Refresh()
? - It is possible to make these variables visible to users without need for LogOff/LogOn operations? If I edit user-level environment variables (also in registry) they are immediately available, but with global - they are not.
Thanks.