この記事について
この記事は、生成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設定を別の入口から見ていることを安全に体験できます。
