环境变量读写
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 只影响当前窗口,重启终端就恢复原样。需要长期生效必须写用户级或系统级变量,并且已经运行的进程不会自动获得新值。
修改系统级变量会影响整机所有用户与后续服务,且需要管理员权限。批量下发前应记录变量名与取值,改错时可以快速回退。