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 %zfro%..... %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 %zfro% - 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
zfoovariable 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.