web-dev-qa-db-ja.com

PATH環境変数がコマンドプロンプトと異なるのはなぜですか?

少し重要な背景:私の会社には、ログイン時にユーザーPATH環境変数を変更する汎用ログインVBSスクリプトがあり、マップされたDFSファイル共有に依存するソフトウェアを実行できます。私は最近、Windows Powershell SDKをWindows 7 Enterpriseマシンにインストールし、PowershellコマンドラインからPATH環境変数を変更してみました。

これに続いて、これらのログインPATHの変更に対応するアプリケーションを実行できなくなり、環境変数エディターのPATHが、コマンドプロンプトから'echo %PATH%'を発行したときに表示されたものとは異なるものに設定されたことがわかりました。

したがって、たとえば(簡略化)環境変数エディター(My Computer properties -> Advanced System Settings -> Environment Variables)から、

 C:\MyDir\; C:\MyOtherDir

一方、コマンドプロンプトから'echo %PATH%'を実行すると、次のようになります。

 C:\MyDir\

他の誰かが同様の問題を抱えていて、何らかの解決策がありましたか?私が助けを求めてググったとき、私はこれに遭遇しました:

(関連?)StackOverflowスレッド

ログインスクリプトがExplorer.exe環境以外の何かによって開始された場合、それが問題であることに気付きました。ただし、ログインスクリプトを自分で実行したとき、コマンドプロンプトからのPATHは変更されませんでした。これはPowerShellとどう関係するのでしょうか。これがそのインストールに完全に接続されている方法がありません。

11
PatternMatching

Windowsには、2つのクラスの環境変数システム環境変数ユーザー環境変数があります。 echo %PATH%を使用している場合は、ユーザー環境変数PATHが表示されます。ユーザー変数が定義されていない場合にのみ、システム変数はユーザープロセスに対して有効になります。

PATHセパレータ;の後には空白を入れないでください。

次の Microsoft note が役立つ場合があります。

次のレジストリキーを編集して、ユーザー環境変数を変更できます。

   HKEY_CURRENT_USER \ 
         Environment

次のレジストリキーを編集して、システム環境変数を変更できます。

   HKEY_LOCAL_MACHINE \ 
               SYSTEM \ 
    CurrentControlSet \ 
              Control \ 
      Session Manager \ 
          Environment

拡張する必要がある環境変数(たとえば、%SYSTEM%を使用する場合)は、REG_EXPAND_SZレジストリ値としてレジストリに格納する必要があることに注意してください。タイプREG_SZの値は、レジストリから読み取られるときに展開されません。

追加の注釈:プロセスがその環境を変更するたびに(新しいプロセスの環境を定義するレジストリ設定ではなく)、変更は子プロセスに対してのみ表示されます。

11
Axel Kemper