Où les variables d'environnement sont-elles stockées dans le registre?

191

J'ai besoin d'accéder à distance à une variable d'environnement. Pour ce faire, je pense que le meilleur moyen est de le lire à partir du registre.

Où les variables d'environnement sont-elles stockées dans le registre?

Brian R. Bondy
la source

Réponses:

283

Voici où ils sont stockés sur XP via Server 2012 R2:

Variables utilisateur

HKEY_CURRENT_USER\Environment

Variables système

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Steve Scheffler
la source
7
N'oubliez pas de redémarrer votre système pour appliquer vos modifications.
0x6B6F77616C74
22
Vous n'avez pas besoin de redémarrer. Tuez simplement Explorer.exe et ramenez-le vivant. C'est le processus parent pour par exemple cmd.exe (lorsqu'il est démarré à partir du menu Démarrer)
Cristian Diaconescu
2
Qu'en est-il des autres processus - comme IIS? Je suppose qu'Explorer.exe n'est pas le parent de ceux-ci, donc un redémarrage serait nécessaire?
Colin
3
Les processus lisent les variables d'environnement système au moment de leur démarrage. Donc, avec quelque chose comme IIS, le redémarrage de ce service devrait apporter les valeurs mises à jour.
Steve Scheffler
11
Les variables de chemin utilisateur (Mes documents, AppData, etc.) sont stockées àHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mythofechelon
22

Je me rends compte que c'est vieux, mais il existe un moyen plus efficace de le faire dans Windows 7. SETX est installé par défaut et prend en charge la connexion à d'autres systèmes.

Pour modifier les variables d'environnement global d'un système distant, vous utiliseriez

setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere

Cela ne nécessite pas le redémarrage de l'explorateur.

Jake Nelson
la source
9
Soyez prudent avec cela, car setx tronque tout après les 1024 caractères !!! superuser.com/questions/387619/…
WalyKu
5

cmd:

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
reg query HKEY_CURRENT_USER\Environment

Powershell:

Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Get-Item HKCU:\Environment

Powershell / .NET: (voir https://msdn.microsoft.com/en-us/library/system.environmentvariabletarget(v=vs.110).aspx )

[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)
masterxilo
la source
3

J'ai toujours eu des problèmes avec ça, j'ai fait un getx.bat:

::getx %envvar% [\m]
::reads envvar from user enviroment variable and stores it in getxvalue variable
::with \m read system enviroment

@SETLOCAL EnableDelayedExpansion
@echo OFF

@set l_regpath="HKEY_CURRENT_USER\Environment"
@if "\m"=="%2" set l_regpath="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

::REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH /t REG_SZ /f /d "%PATH%"
::@REG QUERY %l_regpath% /v %1 /S

@FOR /F "tokens=*" %%A IN ('REG QUERY %l_regpath% /v %1 /S') DO (
@  set l_a=%%A
@   if NOT "!l_a!"=="!l_a:    =!" set l_line=!l_a! 
)

::delimiter is four spaces change it to tab \t
@set l_line=!l_line!
@set l_line=%l_line:    =   %

@set getxvalue=

@FOR /F "tokens=3* delims=  " %%A IN ("%l_line%") DO (
@   set getxvalue=%%A
)
@set getxvalue=!getxvalue!
@echo %getxvalue% > getxfile.tmp.txt
@ENDLOCAL

::we already used tab as delimiter
@FOR /F "delims=    " %%A IN (getxfile.tmp.txt) DO (
    @set getxvalue=%%A
)
@del getxfile.tmp.txt

@echo ON
fantaisie
la source