PowerShell中环境变量分进程、用户、系统三级,临时修改用$env:Var名,永久修改需用[Environment]::SetEnvironmentVariable并指定User或Machine作用域,新窗口才生效。
在 powershell 中查看和配置环境变量,关键要分清作用范围(进程级、用户级、系统级)和生效方式(临时 vs 永久)。直接改 $env:path 只影响当前窗口;想让新终端也生效,必须用 .net 方法写入用户或系统配置。
查看当前会话的环境变量
所有变量都以字符串形式存在,大小写在 Windows 上不敏感,但建议统一用大写习惯(如 Path)。
- 查单个变量值:
$env:Path或echo $env:JAVA_HOME - 查所有变量(带过滤):
Get-ChildItem Env: | Where-Object Name -like "*python*" - 查全部变量列表(简洁显示):
gci env:(gci是Get-ChildItem的别名)
临时修改(仅当前 PowerShell 窗口有效)
这类操作不会写入注册表,关闭窗口即失效,适合调试或一次性任务。
- 设置新变量:
$env:MY_VAR = "test-value" - 追加路径到 Path:
$env:Path += ";C:\MyTools"(注意分号前不能有空格) - 覆盖整个 Path:
$env:Path = "C:\NewRoot;$env:Path"
永久修改用户级环境变量
推荐大多数场景使用。变量保存在当前用户的注册表项中,无需管理员权限,对所有新启动的 PowerShell/ CMD 生效。
- 设置新变量:
[Environment]::SetEnvironmentVariable("EDITOR", "notepad.exe", "User") - 安全追加路径(避免重复):
$new = "C:\Python39\Scripts"; $current = [Environment]::GetEnvironmentVariable("Path", "User"); if ($current -notlike "*$new*") { [Environment]::SetEnvironmentVariable("Path", "$current;$new", "User") } - 查看已设的用户变量:
[Environment]::GetEnvironmentVariable("Path", "User") -split ";"
永久修改系统级环境变量
影响本机所有用户,必须以管理员身份运行 PowerShell,操作前建议备份原值。
- 添加系统级路径:
Start-Process powershell -Verb RunAs -ArgumentList "-Command \"[Environment]::SetEnvironmentVariable('Path', [Environment]::GetEnvironmentVariable('Path', 'Machine') + ';C:\GlobalTools', 'Machine')\"" - 更稳妥做法:右键“开始”→“Windows Terminal(管理员)”→执行命令
- 验证是否写入成功:
[Environment]::GetEnvironmentVariable("Path", "Machine")
改完后,新开一个 PowerShell 窗口才能看到永久生效的结果。如果依赖某个变量的程序已运行,需重启该程序——环境变量是在进程启动时读取的,不是动态刷新的。

















