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?
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:
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
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
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.
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)
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