我需要远程访问一个环境变量。要做到这一点,我认为最好的方法是从注册表中读取它。
环境变量存储在Windows注册表的哪里?
我需要远程访问一个环境变量。要做到这一点,我认为最好的方法是从注册表中读取它。
环境变量存储在Windows注册表的哪里?
以下是它们在Windows XP到Windows Server 2012 R2中存储的位置:
用户变量
HKEY_CURRENT_USER\Environment
系统变量
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
在Windows 7中有一种更有效的方法。默认安装SETX,支持连接其他系统。
要修改远程系统的全局环境变量,可以使用
setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere
这并不需要重新启动Windows资源管理器。
/M要设置的变量 系统范围(HKEY_LOCAL_MACHINE) 环境。默认是设置 HKEY_CURRENT_USER下的变量 环境。
/S system要连接的远程系统。
我总是有问题,我做了一个getx.bat脚本:
:: getx %envvar% [\m]
:: Reads envvar from user environment variable and stores it in the getxvalue variable
:: with \m read system environment
@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 a delimiter
@FOR /F "delims= " %%A IN (getxfile.tmp.txt) DO (
@set getxvalue=%%A
)
@del getxfile.tmp.txt
@echo ON
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:(参见EnvironmentVariableTarget Enum)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)