Ouvrez regedit.exe
, accédez à HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
. Créez deux variables d'environnement :
Nom Type Données
----- -------------- -----------
zbar REG_SZ water
zfoo REG_EXPAND_SZ %zbar%
Ouvrez un nouvel cmd.exe
, powershell.exe
ou autre. Ces variables sont manquantes. Faites une déconnexion, puis reconnectez-vous. Dans la fenêtre de cmd.exe
, tapez echo %zbar%
- water
s'affiche. Tapez echo %zfoo%
et %zbar%
s'affiche, mais je m'attends à voir la valeur étendue - water
.
Et maintenant. Ouvrez la boîte de dialogue des Variables d'Environnement de Windows. Modifiez ou créez n'importe quelle variable (par exemple zzz=zzz
). Réouvrez cmd.exe
et tapez echo %zfoo%
- maintenant vous voyez water
!
En réalité, je crée ces variables avec un script PowerShell. Mais tout ce que ce script fait est des manipulations de registre décrites.
Questions :
- Comment forcer la variable
zfoo
à avoir une valeur correcte sans ce tour de magie avec l'ouverture de la boîte de dialogue des Variables d'Environnement de Windows et la modification de certaines variables ? Peut-être devrais-je appeler une API, quelque chose comme[Microsoft.Win32.Registry]::Refresh()
? - Est-il possible de rendre ces variables visibles pour les utilisateurs sans avoir besoin des opérations de Déconnexion/Reconnexion ? Si je modifie les variables d'environnement au niveau de l'utilisateur (également dans le registre), elles sont immédiatement disponibles, mais au niveau global, elles ne le sont pas.
Merci.