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


10

私の会社には、ログイン時にユーザーのPATH環境変数を変更し、マップされたDFSファイル共有に依存するソフトウェアを実行できるようにする汎用ログインVBSスクリプトがあります。私は最近Windows 7 EnterpriseマシンにWindows Powershell SDKをインストールし、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とどう関係がありますか?私はこれがそのインストールにどのように接続されているかがわからない。


どうやってPowerShellでパスを変更しましたか?あなたはどこに%PATH%をエコーし​​ましたか? cmd.exeには?
Werner Henze

以下の答えは天才です。
SDsolar

回答:


11

Windowsには2つのクラスの環境変数があります システム環境変数 そして ユーザー環境変数 。あなたが使っているなら echo %PATH% あなたはあなたに会うでしょう ユーザー環境変数 PATH。ユーザー変数が定義されていない場合に限り、システム変数はユーザープロセスに対して有効になります。

PATH セパレータ ; ブランクの後に続けてはいけません。

以下 マイクロソフトメモ 役に立つかもしれません:

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

   HKEY_CURRENT_USER \ 
         Environment

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

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

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

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


1
環境変数を修正する必要があるならば、私はAxelの要点を強調したいのですが、それからレジストリに変更を加える必要があります。実際に私はこれを手助けするためにPowerShell関数を作成しました: computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas

1
変更する値はなく、2つの変数のみ tmp そして temp。これがユーザーのパスであることを確認しています。変更する必要がありますか?
Johnny_D

これはうまくいかないようです(少なくともリブート前)。パス変数がHKCU \ Environmentにない、cmd.exeのパス変数は正しく表示されますが、起動されたアプリケーションはまだ古いパス変数を見ています。
Martin Argerami

@Martin:はい、起動したアプリケーションはレジストリの変更を認識しません。アプリケーションの起動時にメモリのコピーを取得するためです。このコピーは、サブプロセスを起動する親プロセスによって異なります。たとえばWindowsエクスプローラから起動した場合は、新しいPATHを取得するためにエクスプローラを再起動する必要があります。
Axel Kemper

はい、それは私がやってしまったことです。ありがとう。
Martin Argerami
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.