• ベストアンサー

PowerShellと環境変数pathについて、

PowerShellと環境変数pathについて、 Windowsの環境変数pathには、アプリケーションをインストールしたら自動的に追加されたりします。 これらの中には%systemroot%のようにdos系の環境変数を使った物もあります。 PowerShell から$env:pathを参照した場合も dosから%path%を参照した場合も pathの内容自体は同じですが、 PowerShellから実行する場合は、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない状態になります。 そんなものなのでしょうか? PowerShellを同じように使うためには、 なんとなく気持ちが悪いですが、 %systemroot%をc:\windowsで登録しなおすか、もしくは二重登録する必要があるのでしょうか? 何かスマートな方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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でその展開されない環境変数を削除して作り直せば良いです。

ngwave
質問者

お礼

ありがとうございます。 なるほど、そういう事ですか。

その他の回答 (1)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

詳細に記載してあるようですが、結局何が問題なのか不明です。 >、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない この「pathが通っていない」と言う表現は意味が通じません。どう言う意味でしょうか? >$env:systemroot と実行しても値が表示されない、と言う事でしょうか? それともPowerShell内で再設定したが、変更されないと言う事でしょうか? それとも、PowerShell内では再設定して有効だったが、終了すると元に戻ってしまう。 >、%systemroot%のようなdos系の環境変数は これは認識違いです。”%”でくくるのはDOSでの変数参照の仕方です。システム環境変数(OSの環境変数)はプログラム・スクリプトに依存しません。 ここでの環境変数は”systemroot”であって”%systemroot%”ではありません。 なので $env:systemroot とするべきです。なお下記のようにしてみてください。 PS [User home]> dir env: これで環境変数の一覧がでます。DOSでは >set ですね。環境変数と参照方法を誤解しているかと!! そうでなければ、「何をどのようにしたら、このように動作しない」と具体的なスクリプトを書かないと、全くわかりません。

ngwave
質問者

補足

参照方法は理解しています。 私の環境には、dos系の環境変数の記述方法に依存したpathが環境変数pathにいくつかあります。 プログラムインストールの過程でインストーラが追加した物と思われます。 コントロールパネル、システム、詳細設定タブ、環境変数ボタン システム環境変数のリスト上の変数がpathのものにカーソルをあて、編集ボタン にて確認できます。 ここに、 %systemroot%;%systemroot%\system32;・・・ などが書かれています。 ユーザー環境変数のリストの変数がtempのところには %USERPROFILE%/Local Setting/Temp と書かれています。 あくまで例ですが、環境変数内にdos依存型の記述があります。 これらは、手作業でGUI的に書き換えておかないとPowerShellからは使えないのですか? という質問ですが、伝わりませんか。

関連するQ&A