Wo werden Umgebungsvariablen in der Registrierung gespeichert?

190

Ich muss remote auf eine Umgebungsvariable zugreifen. Um dies zu tun, denke ich, ist der beste Weg, es aus der Registrierung zu lesen.

Wo werden Umgebungsvariablen in der Registrierung gespeichert?

Brian R. Bondy
quelle

Antworten:

282

Hier sind sie unter XP über Server 2012 R2 gespeichert:

Benutzervariablen

HKEY_CURRENT_USER\Environment

Systemvariablen

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Steve Scheffler
quelle
7
Denken Sie daran, Ihr System neu zu starten, um Ihre Änderungen zu übernehmen.
0x6B6F77616C74
22
Sie müssen nicht neu starten. Töte einfach Explorer.exe und bring es lebend zurück. Es ist der übergeordnete Prozess für zB cmd.exe (wenn über das Startmenü gestartet)
Cristian Diaconescu
2
Wie wäre es mit anderen Prozessen - wie IIS? Ich vermute, Explorer.exe ist nicht das übergeordnete Element für diese, also wäre ein Neustart erforderlich?
Colin
3
Prozesse, die zum Zeitpunkt des Starts System-Env-Variablen einlesen. Bei so etwas wie IIS sollte ein Neustart dieses Dienstes die aktualisierten Werte einbringen.
Steve Scheffler
11
Benutzerpfadvariablen (Eigene Dateien, AppData usw.) werden amHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mythofechelon
22

Mir ist klar, dass dies alt ist, aber es gibt eine effizientere Möglichkeit, dies in Windows 7 zu tun. SETX ist standardmäßig installiert und unterstützt die Verbindung zu anderen Systemen.

Zum Ändern der globalen Umgebungsvariablen eines Remote-Systems, die Sie verwenden würden

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

Dies erfordert keinen Neustart des Explorers.

Jake Nelson
quelle
9
Seien Sie vorsichtig damit, da setx nach den 1024 Zeichen alles abschneidet !!! superuser.com/questions/387619/...
WalyKu
5

cmd:

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

Power Shell:

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

Powershell / .NET: (siehe 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
quelle
3

Ich hatte immer Probleme damit, ich habe eine getx.bat gemacht:

::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
fantastisch
quelle