¿Dónde se almacenan las variables de entorno en el registro?

190

Necesito acceder a una variable de entorno de forma remota. Para hacer esto, creo que la mejor manera es leerlo desde el registro.

¿Dónde se almacenan las variables de entorno en el registro?

Brian R. Bondy
fuente

Respuestas:

282

Aquí es donde se almacenan en XP a través de Server 2012 R2:

Variables de usuario

HKEY_CURRENT_USER\Environment

Variables del sistema

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Steve Scheffler
fuente
77
Recuerde reiniciar su sistema para que sus cambios surtan efecto.
0x6B6F77616C74
22
No necesitas reiniciar. Simplemente mata Explorer.exe y tráelo de vuelta con vida. Es el proceso principal para, por ejemplo, cmd.exe (cuando se inicia desde el menú Inicio)
Cristian Diaconescu
2
¿Qué tal para otros procesos, como IIS? Supongo que Explorer.exe no es el padre de esos, por lo que sería necesario reiniciar?
Colin
3
Procesos leídos en las variables de entorno del sistema en el momento en que comienzan. Entonces, con algo como IIS, reiniciar ese servicio debería traer los valores actualizados.
Steve Scheffler
11
Las variables de ruta de usuario (Mis documentos, AppData, etc.) se almacenan enHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mythofechelon
22

Me doy cuenta de que esto es antiguo, pero hay una forma más eficiente de hacerlo en Windows 7. SETX está instalado de forma predeterminada y admite la conexión a otros sistemas.

Para modificar las variables de entorno global de un sistema remoto, usaría

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

Esto no requiere reiniciar el explorador.

Jake Nelson
fuente
9
¡Ten cuidado con esto, ya que setx trunca todo después de los 1024 caracteres! superuser.com/questions/387619/...
WalyKu
5

cmd:

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

Potencia Shell:

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

Powershell / .NET: (consulte 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
fuente
3

Siempre tuve problemas con eso, hice 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
fantastory
fuente