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?

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

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.


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)

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.