What's?
タイトルどおりですが、とてもとてもよく忘れるのでメモということで。
環境
PS C:\Users\xxxxx> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 4046
PowerShellで環境変数Pathにアクセスする
まず、PowerShellの環境変数に関するドキュメントはこちら。
PowerShellで環境変数を扱うには、3つの方法が用意されているようです。
- 変数の構文
$Env:<variable-name>
- 環境プロバイダーと項目コマンドレット
-
Copy-Item
、Set-Item
、Get-Item
、Remove-Item
-
- NET System.Environment クラス
-
[Environment]::SetEnvironmentVariable
、[Environment]::GetEnvironmentVariable
-
今回は変数の構文($Env:<variable-name>
)を使っていこうとおもいます。
環境変数Pathの内容を表示する
PS C:\Users\xxxxx> $Env:Path
<環境変数Pathの内容>
環境変数Pathにパスを追加する
末尾に追加。
PS C:\Users\xxxxx> $Env:Path+=";<追加したいパス>"
先頭に追加。
PS C:\Users\xxxxx> $Env:Path="<追加したいパス>;"+$Env:Path
内容自体を変えたい場合は、まるっと差し替えたらいいかなと…。
PS C:\Users\xxxxx> $Env:Path="<パスごとに;で区切った内容>"
他の方法を使ってハマったこと
こちらのドキュメントに書かれているのですが、Windowsの環境変数には3つのスコープがあります。
- マシン (またはシステム) のスコープ
- ユーザー スコープ
- プロセスのスコープ
System.Environment
クラス以外の方法で環境変数Pathを見るとマシンスコープとユーザースコープが足されたものが表示されるのですが、System.Environment
クラスで見るとそれぞれ独立して表示されます。
# マシンスコープ
PS C:\Users\xxxxx> [Environment]::GetEnvironmentVariable("Path","Machine")
# ユーザースコープ
PS C:\Users\xxxxx> [Environment]::GetEnvironmentVariable("Path","User")
なので、こちらの値を元にPathを組み立てる場合は片方のスコープしか見ていないとPathの内容が欠落する…みたいなことになります。
このあたりを残しておきたかったのが、今回の内容を書いたきっかけですね。