Bir ortam değişkenine uzaktan erişmem gerekiyor. Bunu yapmak için en iyi yolu kayıt defterinden okumak olduğunu düşünüyorum.
Ortam değişkenleri kayıt defterinde nerede depolanır?
Bir ortam değişkenine uzaktan erişmem gerekiyor. Bunu yapmak için en iyi yolu kayıt defterinden okumak olduğunu düşünüyorum.
Ortam değişkenleri kayıt defterinde nerede depolanır?
Yanıtlar:
Server 2012 R2 ile XP'de depolandıkları yer:
Kullanıcı Değişkenleri
HKEY_CURRENT_USER\Environment
Sistem Değişkenleri
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Bunun eski olduğunu anlıyorum, ancak Windows 7'de bunu yapmanın daha etkili bir yolu var. SETX varsayılan olarak yüklenir ve diğer sistemlere bağlanmayı destekler.
Kullanabileceğiniz bir uzak sistem genel ortam değişkenlerini değiştirmek için
setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere
Bu, kaşifin yeniden başlatılmasını gerektirmez.
cmd:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
reg query HKEY_CURRENT_USER\Environment
Güç kalkanı:
Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Get-Item HKCU:\Environment
Powershell / .NET: (bkz. 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)
Her zaman bununla ilgili sorunlar yaşadım, getx.bat yaptım:
::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