Di mana variabel lingkungan disimpan dalam registri?

191

Saya perlu mengakses variabel lingkungan dari jarak jauh. Untuk melakukan ini saya pikir cara terbaik adalah dengan membacanya dari registri.

Di mana variabel lingkungan disimpan dalam registri?

Brian R. Bondy
sumber

Jawaban:

283

Di sinilah mereka disimpan di XP melalui Server 2012 R2:

Variabel Pengguna

HKEY_CURRENT_USER\Environment

Variabel Sistem

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Steve Scheffler
sumber
7
Ingatlah untuk memulai kembali sistem Anda untuk menerapkan perubahan Anda.
0x6B6F77616C74
22
Anda tidak perlu memulai ulang. Cukup bunuh Explorer.exe dan hidupkan kembali. Ini adalah proses induk untuk misalnya cmd.exe (ketika mulai dari menu Start)
Cristian Diaconescu
2
Bagaimana dengan proses lain - seperti IIS? Saya menduga Explorer.exe bukan induk untuk itu, jadi restart akan diperlukan?
Colin
3
Proses membaca dalam variabel sistem env pada saat mereka mulai. Jadi dengan sesuatu seperti IIS, memulai kembali layanan itu harus membawa nilai yang diperbarui.
Steve Scheffler
11
Variabel jalur pengguna (My Documents, AppData, dll) disimpan diHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mythofechelon
22

Saya menyadari ini sudah tua tetapi ada cara yang lebih efisien untuk melakukan ini di Windows 7. SETX diinstal secara default dan mendukung koneksi ke sistem lain.

Untuk memodifikasi variabel lingkungan global sistem jarak jauh yang akan Anda gunakan

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

Ini tidak memerlukan restart penjelajah.

Jake Nelson
sumber
9
Hati-hati dengan ini, karena setx memotong segalanya setelah 1024 charachters !!! 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: (lihat 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
sumber
3

Saya selalu punya masalah dengan itu, saya membuat 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
sumber