简体   繁体   English

Windows 注册表中存储的环境变量在哪里?

[英]Where are environment variables stored in the Windows Registry?

I need to access an environment variable remotely.我需要远程访问环境变量。 To do this, I think the best way is to read it from registry.为此,我认为最好的方法是从注册表中读取它。

Where are environment variables stored in the Windows Registry? Windows 注册表中存储的环境变量在哪里?

Here's where they're stored on Windows XP through Windows Server 2012 R2:以下是它们通过Windows Server 2012 R2 存储在Windows XP上的位置:

User Variables用户变量

HKEY_CURRENT_USER\Environment

System Variables系统变量

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

There is a more efficient way of doing this in Windows 7. SETX is installed by default and supports connecting to other systems.在 Windows 7 中有一种更有效的方法。SETX 是默认安装的,并支持连接到其他系统。

To modify a remote system's global environment variables, you would use要修改远程系统的全局环境变量,您可以使用

setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere

This does not require restarting Windows Explorer.这不需要重新启动 Windows 资源管理器。

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: (see EnvironmentVariableTarget Enum ) Powershell/.NET:(参见EnvironmentVariableTarget 枚举

[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)

I always had problems with that, and I made a getx.bat script:我总是遇到问题,我做了一个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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM