少し重要な背景:私の会社には、ログイン時にユーザー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\
他の誰かが同様の問題を抱えていて、何らかの解決策がありましたか?私が助けを求めてググったとき、私はこれに遭遇しました:
ログインスクリプトがExplorer.exe環境以外の何かによって開始された場合、それが問題であることに気付きました。ただし、ログインスクリプトを自分で実行したとき、コマンドプロンプトからのPATHは変更されませんでした。これはPowerShellとどう関係するのでしょうか。これがそのインストールに完全に接続されている方法がありません。
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
の値は、レジストリから読み取られるときに展開されません。
追加の注釈:プロセスがその環境を変更するたびに(新しいプロセスの環境を定義するレジストリ設定ではなく)、変更は子プロセスに対してのみ表示されます。