在 PowerShell 中修改环境变量并通过 GUI 核对答案 — Process、User 与 Machine 的区别

PowerShellカテゴリを表すパンダのイラスト PowerShell

关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。我们整理了 .NET 的 Environment API 与 Windows 环境变量的思路,并将其设计为仅通过不破坏现有值的虚拟变量来观察 Process/User 区别的步骤。

验证状态:📘 已确认官方信息 · Windows 实机未确认

在 PowerShell 中设置的 $env:PAPANDA_DEMO = 'A' 在新打开的 PowerShell 中消失并不是什么稀奇的事。仅适用于当前 Process 的环境变量与作为 User/Machine 保存的环境变量,其作用域是不同的。

我们来通过 在控制台中修改 → 在 Windows 的环境变量 GUI 中核对答案 这一流程来体验这种区别。

确认修改前状态

首先只使用虚拟名称。PATH 不要修改诸如 或现有的 API 密钥。

$name = 'PAPANDA_DEMO'

[pscustomobject]@{
    Process = [Environment]::GetEnvironmentVariable($name, 'Process')
    User    = [Environment]::GetEnvironmentVariable($name, 'User')
    Machine = [Environment]::GetEnvironmentVariable($name, 'Machine')
}

在 .NET 的 Environment API 中,可以通过指定 target 来进行读写。

首先仅修改 Process

$env:PAPANDA_DEMO = 'process-only'

Write-Host "[RESULT] current process = $env:PAPANDA_DEMO"

在这种状态下即使打开 Windows 的“环境变量” GUI,用户环境变量列表中通常也不会出现 PAPANDA_DEMO 。因为这是仅为当前 PowerShell process 设置的。

flowchart LR
    P[現在のPowerShell Process] -->|$env:で設定| PE[Process environment]
    U[User environment] --> N[新しく起動するProcess]
    M[Machine environment] --> N
    PE -. 現在のProcessだけ .-> P

仅对 User 进行一处设置

接下来向 User 作用域设置虚拟值。由于 Machine 涉及管理员权限且影响范围较广,本次修改实验中不予涉及。

[Environment]::SetEnvironmentVariable(
    'PAPANDA_DEMO',
    'user-value',
    'User'
)

Write-Host '[SUCCESS] User scopeへPAPANDA_DEMOを設定しました'

通过 GUI 核对答案

如果是 Windows 11,请从“系统属性”中打开“环境变量”,用户环境变量中确认是否有 PAPANDA_DEMO = user-value

这里需要明白的不是“PowerShell 和 GUI 拥有各自独立的设置”,而是通过不同的入口查看相同的 User 作用域设置这一事实。

再次在控制台中确认

[Environment]::GetEnvironmentVariable('PAPANDA_DEMO', 'User')

user-value 如果返回了 ,说明 GUI 和控制台的观察结果一致。

需要注意的是,已经启动的 process 的 $env:PAPANDA_DEMO 并不一定会自动替换为 User 值。请留意新 process 接收环境时的时机差异。

尝试修改一处

仅将 User 值从 user-value 修改为 user-value-2 ,然后重新打开 GUI 确认显示内容是否发生了变化。

[Environment]::SetEnvironmentVariable(
    'PAPANDA_DEMO',
    'user-value-2',
    'User'
)

恢复原状

测试结束后,删除 User 作用域的虚拟变量。

[Environment]::SetEnvironmentVariable(
    'PAPANDA_DEMO',
    $null,
    'User'
)

Remove-Item Env:PAPANDA_DEMO -ErrorAction SilentlyContinue
Write-Host '[CLEANUP] PAPANDA_DEMOを削除しました'

确认其也已从 GUI 中消失。

如果在工作中应用

环境变量虽然方便,但并不是存放机密信息的万能场所。

  • 区分 Process/User/Machine 的影响范围

  • 不要直接复制粘贴教程来修改 Machine PATH

  • 切勿将真实的 API 密钥显示在屏幕或日志中

  • 服务有时会在与交互式用户不同的环境中运行

  • 切勿将设置来源分散到多处

在运维中,明确“设置在了哪里”非常重要。

官方信息与一手资料

总结

Process/User/Machine 尽管同属“环境变量”,但其生命周期与影响范围各不相同。将虚拟变量设置到 User 作用域中,并在 GUI 和 PowerShell 中双重确认后再行删除,能够安全地体验到“其实是在通过不同入口查看 Windows 设置”这一本质。

文档信息

文章??
在 PowerShell 中修改环境变量并通过 GUI 核对答案 — Process、User 与 Machine 的区别
?布日期
更新日期
来源
https://papanda925.com/?p=15357&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制