Tôi cần truy cập một biến môi trường từ xa. Để thực hiện điều này, tôi nghĩ cách tốt nhất là để đọc nó từ registry.
Các biến môi trường được lưu trữ trong registry là ở đâu?
Tôi cần truy cập một biến môi trường từ xa. Để thực hiện điều này, tôi nghĩ cách tốt nhất là để đọc nó từ registry.
Các biến môi trường được lưu trữ trong registry là ở đâu?
Câu trả lời:
Đây là nơi chúng được lưu trữ trên XP thông qua Server 2012 R2:
Biến người dùng
HKEY_CURRENT_USER\Environment
Biến hệ thống
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Tôi nhận ra điều này đã cũ nhưng có một cách hiệu quả hơn để làm điều này trong Windows 7. SETX được cài đặt theo mặc định và hỗ trợ kết nối với các hệ thống khác.
Để sửa đổi một hệ thống từ xa các biến môi trường toàn cầu, bạn sẽ sử dụng
setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere
Điều này không yêu cầu khởi động lại explorer.
cmd:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
reg query HKEY_CURRENT_USER\Environment
Quyền hạn:
Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Get-Item HKCU:\Environment
Powershell / .NET: (xem https://msdn.microsoft.com/en-us/l Library / system.en môivariabletarget (v = vs.110) .aspx )
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)
Tôi luôn gặp vấn đề với điều đó, tôi đã tạo một 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