首页/系统/Windows 运维速查/环境变量 $env: 读写
PowerShell 基础66 条

环境变量 $env: 读写

访问 Windows 环境变量:读取用 $env:NAME,进程内修改直接赋值,持久化用 [Environment]::SetEnvironmentVariable。

Windows 运维速查系统更新于 2026-10-13

环境变量读写

PowerShell 用 $env:名称 读写环境变量,读取直接引用即可,进程内修改直接赋值。关键要区分作用域:进程内赋值只影响当前会话,退出就失效;要长期生效必须写入用户级或系统级变量,且已运行的进程不会自动获得新值。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7
读取$env:名称,例如 PATH 与 COMPUTERNAME
进程级赋值$env:TEMP = 'D:\\Temp',仅当前进程有效
持久化[Environment]::SetEnvironmentVariable('名称','值','User' 或 'Machine')
作用域Process 当前进程、User 当前用户、Machine 整机
权限要求写入 Machine 级需要管理员权限

典型使用场景

  • 查看 PATH 等关键变量的当前值,排查命令找不到的问题
  • 临时修改当前会话的变量做实验,退出后自动失效
  • 给工具或脚本持久化配置路径,省去每次手工设置
  • 巡检用户级与机器级变量,核对是否被人为改动
  • 父进程设置变量后启动子进程,让子进程继承配置

常用示例

常用示例
# 读取变量
$env:COMPUTERNAME
$env:PATH -split ';' | Select-Object -First 5
# 进程内临时修改,退出会话即失效
$env:MY_FLAG = 'test'
# 持久化到当前用户
[Environment]::SetEnvironmentVariable('MY_VAR','v1','User')
# 读取用户级变量的持久值
[Environment]::GetEnvironmentVariable('MY_VAR','User')
# 向用户级 PATH 追加目录,先读原值再拼接
$old = [Environment]::GetEnvironmentVariable('PATH','User')
[Environment]::SetEnvironmentVariable('PATH', $old + ';D:\Tools\bin', 'User')

作用域与生效范围

作用域影响范围生效时机
Process当前进程及其子进程立即生效,进程退出即消失
User当前用户新启动的进程新开进程才可见
Machine整机所有用户的新进程新开进程才可见,需管理员权限
已运行进程不受持久化改动影响需重启对应程序
会话变量仅当前终端窗口关闭终端即失效
直接修改会话里的 PATH 只影响当前窗口,重启终端就恢复原样。需要长期生效必须写用户级或系统级变量,并且已经运行的进程不会自动获得新值。
修改系统级变量会影响整机所有用户与后续服务,且需要管理员权限。批量下发前应记录变量名与取值,改错时可以快速回退。

易错点

  • 只改会话内的变量值就以为配置已持久化,重启终端后失效,现象看起来像时好时坏
  • 持久化变量对已运行的进程无效,改完不重开进程就验证不出效果
  • 用户级与系统级存在同名变量时,实际生效的取值可能并非你预期的那一个
  • 修改系统级 PATH 前不备份原值,写错后可能连常用命令都无法直接执行
  • 变量名拼写与系统既有名称不一致,子进程读到的不是预期的值

数据来源与参考

  • Microsoft Learn:about_Environment_Variables

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌