ฉันจำเป็นต้องเข้าถึงตัวแปรสภาพแวดล้อมจากระยะไกล เมื่อต้องการทำสิ่งนี้ฉันคิดว่าวิธีที่ดีที่สุดคืออ่านจากรีจิสทรี
ตัวแปรสภาพแวดล้อมเก็บไว้ในรีจิสทรีที่ไหน
ฉันจำเป็นต้องเข้าถึงตัวแปรสภาพแวดล้อมจากระยะไกล เมื่อต้องการทำสิ่งนี้ฉันคิดว่าวิธีที่ดีที่สุดคืออ่านจากรีจิสทรี
ตัวแปรสภาพแวดล้อมเก็บไว้ในรีจิสทรีที่ไหน
คำตอบ:
ที่นี่จัดเก็บไว้ใน XP ผ่าน Server 2012 R2:
ตัวแปรผู้ใช้
HKEY_CURRENT_USER\Environment
ตัวแปรระบบ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
ฉันรู้ว่านี่เก่า แต่มีวิธีที่มีประสิทธิภาพมากกว่าในการทำเช่นนี้ใน Windows 7 SETX ติดตั้งโดยค่าเริ่มต้นและรองรับการเชื่อมต่อกับระบบอื่น
หากต้องการแก้ไขตัวแปรสภาพแวดล้อมโกลบอลของระบบรีโมตที่คุณจะใช้
setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere
สิ่งนี้ไม่ต้องการการเริ่มระบบใหม่ explorer
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: (ดูhttps://msdn.microsoft.com/en-us/library/system.environmentvariabletarget(v=vsv10.1).aspx )
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)
ฉันมักจะมีปัญหากับสิ่งนั้นฉันทำ 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