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