この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoftの環境変数API仕様を確認し、PATHを変更せずProcess/User/Machineの3スコープを読み取り専用で比較する手順にしました。
検証ステータス:📘 Microsoft公式仕様確認済み・Windows実機未確認
「PATHに入っているはずなのにコマンドが見つからない」ときは、現在のプロセスが見ているPATHとUser/Machineに保存されたPATHを分けて確認すると切り分けやすくなります。
まず3つ並べる
[pscustomobject]@{
Process = [Environment]::GetEnvironmentVariable('Path','Process')
User = [Environment]::GetEnvironmentVariable('Path','User')
Machine = [Environment]::GetEnvironmentVariable('Path','Machine')
} | Format-List
このコードは変更しません。見るのは3つが必ず同じとは限らないことです。
なぜ差が出るのか
新しく起動したプロセスは親プロセスから環境を受け取ります。User/Machine側を変更しても、すでに開いているPowerShellが自動的に同じ値へ更新されるとは限りません。
1か所変えてみる
PowerShellを新しく1枚だけ開き直し、ProcessのPATHを再取得します。既存ウィンドウとの違いがあれば、「保存値」と「現在のプロセス値」を混同していた可能性があります。
GUIで答え合わせ
Windowsの「環境変数」画面ではUserとSystemのPATHを確認できます。GUIを開く前にPowerShellで値を採取しておくと、どのスコープを見ているか比較しやすくなります。
仕事で使うなら
開発ツール、Git、Python、Java、社内CLIの導入後に「再起動が必要なのか」「User側だけに入ったのか」を切り分ける一次確認として使えます。PATHを自動編集するスクリプトへ進む前に、重複・空要素・既存値を必ず確認してください。
