- ベストアンサー
PowerShellと環境変数pathについて、
PowerShellと環境変数pathについて、 Windowsの環境変数pathには、アプリケーションをインストールしたら自動的に追加されたりします。 これらの中には%systemroot%のようにdos系の環境変数を使った物もあります。 PowerShell から$env:pathを参照した場合も dosから%path%を参照した場合も pathの内容自体は同じですが、 PowerShellから実行する場合は、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない状態になります。 そんなものなのでしょうか? PowerShellを同じように使うためには、 なんとなく気持ちが悪いですが、 %systemroot%をc:\windowsで登録しなおすか、もしくは二重登録する必要があるのでしょうか? 何かスマートな方法はありますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>これらは、手作業でGUI的に書き換えておかないとPowerShellからは使えないのですか? そんなことは無いです。%での環境変数の参照はOSが行いますので。 ただ、展開されないケースもあるようです。環境変数はレジストリの下記にあります。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment HKEY_CURRENT_USER\Environment この値に二種類あって、REG_SZ(文字列値) は % による参照が展開されず、REG_EXPAND_SZ(展開可能な文字列値) は展開されます。 GUIで、システムのプロパティの詳細設定で環境変数を新規に登録すると REG_EXPAND_SZ になりますが、何らかのプログラムが REG_SZ でレジストリ登録した環境変数はそのままなので、% が展開されません。これは、PowerShellでもコマンドプロンプトでも同じです。 一度GUIでその展開されない環境変数を削除して作り直せば良いです。
その他の回答 (1)
- 0909union
- ベストアンサー率39% (325/818)
詳細に記載してあるようですが、結局何が問題なのか不明です。 >、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない この「pathが通っていない」と言う表現は意味が通じません。どう言う意味でしょうか? >$env:systemroot と実行しても値が表示されない、と言う事でしょうか? それともPowerShell内で再設定したが、変更されないと言う事でしょうか? それとも、PowerShell内では再設定して有効だったが、終了すると元に戻ってしまう。 >、%systemroot%のようなdos系の環境変数は これは認識違いです。”%”でくくるのはDOSでの変数参照の仕方です。システム環境変数(OSの環境変数)はプログラム・スクリプトに依存しません。 ここでの環境変数は”systemroot”であって”%systemroot%”ではありません。 なので $env:systemroot とするべきです。なお下記のようにしてみてください。 PS [User home]> dir env: これで環境変数の一覧がでます。DOSでは >set ですね。環境変数と参照方法を誤解しているかと!! そうでなければ、「何をどのようにしたら、このように動作しない」と具体的なスクリプトを書かないと、全くわかりません。
補足
参照方法は理解しています。 私の環境には、dos系の環境変数の記述方法に依存したpathが環境変数pathにいくつかあります。 プログラムインストールの過程でインストーラが追加した物と思われます。 コントロールパネル、システム、詳細設定タブ、環境変数ボタン システム環境変数のリスト上の変数がpathのものにカーソルをあて、編集ボタン にて確認できます。 ここに、 %systemroot%;%systemroot%\system32;・・・ などが書かれています。 ユーザー環境変数のリストの変数がtempのところには %USERPROFILE%/Local Setting/Temp と書かれています。 あくまで例ですが、環境変数内にdos依存型の記述があります。 これらは、手作業でGUI的に書き換えておかないとPowerShellからは使えないのですか? という質問ですが、伝わりませんか。
お礼
ありがとうございます。 なるほど、そういう事ですか。