みなさん、今回もPowerShellのお話です。
が、今回は前回のps1ファイルを作るときに環境変数のPATHへも自動で登録できないか色々試していた時の副産物です。
結論からいいますと、どうも環境変数への変更はOSがもっているものへの変更はできない感じです。
が、しかしPSが読み込んでいるものへの変更は可能のようです。
どういうことかというと、PSでは環境変数のコピーをそれぞれのインスタンス毎に(ウィンドウ毎に)持っているようです。
次のps1ファイルを見てみてください。
SetEnvPath.ps1
---------------------------------------------------------------------
$Env:Path > path.txt
$temp = Get-Location
$Env:Path = $Env:Path + ";" + $temp.Path
$Env:Path > new-path.txt
Get-Content new-path.txt
---------------------------------------------------------------------
何をしているかといいますと、まず$Envというのは、環境変数を表すPSで既定の変数です。
そして、環境変数のPATHにアクセスしたいときは、$Env:Pathという具合にしています。
これでもうわかった方もいるかと思いますが、1行目で念のために現在のPATHの値を書きだしておいて、現在のディレクトリをPATHに加えることをしています。
そして、加えた後のPATHの値を確認しています。
ここでなぜいちいちファイルに書き出すかというと、コマンドで$Env:Pathという感じで画面に書き出すと、途中で切れてしますようです。
で、これを動かしてみると、確かに現在のフォルダのパスがPATHに加えられていることが確認できます。
そして、別のフォルダに移動して、先ほどいたフォルダにあるps1ファイルをパスなしで名前だけで実行させようとすると動きます。
では、別のウィンドウでPSを起動してみてください。(もしくはOSの環境変数を直接見てみてください)
環境変数のPATHへの変更が加えられていないことがわかります。
これは、セキュリティを意識してのものかもしれませんが、先ほどのSetEnvPath.ps1をうまく使えば、例えばps1ファイルをテストしながら作成するフォルダを決めておくとします。
ですが、例えばその中で使いたいファイルが別フォルダにあってパスも指定しないといけない場合は、先にテスト用のフォルダでSetEnvPath.ps1みたいなもので、PATHに一時的に登録しておいて、目的のファイルの方にカレントディレクトリを移動して作業するという場合にはいいのかも(?)しれません。
あちこちにps1ファイルの残骸が残るのも面倒ですし。
と、まあ、使い物になるかはわからないですが、こんな感じのことがわかりました。
ではまた^^ノシ