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へ1か所だけ設定する

次に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が環境を受け取るタイミングとの違いを意識します。

1か所変えてみる

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の違い
作成日
更新日
Source URL
https://papanda925.com/?p=15352

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました