2009-09-02 9 views
2

バッチスクリプトがPowerShellから呼び出されたかどうかを知る方法はありますか? this question - virtualenv-in-powershellに関連バッチスクリプトは、PowerShellから呼び出されたかどうかを知ることができますか?

ようなものが必要。..

if (%THIS_BATCH_CALLED_FROM_POWERSHELL%) 
    ... warn the user or drop back to powershell to execute the proper instructions... 

質問。

+0

私はこの問題を理解していません。バッチファイルはPowerShellから直接実行されません。 PowerShell内でバッチファイルを実行すると、cmd.exeの新しいインスタンスが生成され、バッチファイルの実際の実行が実行されます。 –

+0

私はPowershell環境で環境変数を変更する方法を見つけたいと思います。 – JasonTrue

+0

@Keith Hill:そうです。私はバッチスクリプトの中から、PSから呼び出されたかどうかを知る方法を探しています。 –

答えて

3

"tlist.exe/t"またはthis oneのようなツールを使用して、現在のプロセスとすべての親プロセスのPIDを表示できます。これらのPIDのそれぞれをチェックして、PowerShell.exeに対応するものがあるかどうかを調べることができます。

+0

それは醜い方法ですが、少なくとも仕事をします。ありがとう、キース。 –

0

スクリプトにデフォルトの警告を追加して、警告を表示しないようにするフラグを渡すことができます。それをパワーシェルから呼び出すと、そのフラグを渡します。

+0

これはフラグなしで行うことを意図しています。ありがとう。 –

0

私のPowershell環境(PS 2.0 CTP)では、通常のコマンドライン環境では設定されていない環境変数PSMODULEPATHがあるようですが、Powershellに子CMD.exeシェルがある場合でも存在します。

バッチスクリプトでPSMODULEPATHの存在を「十分に確かめる」ことができると思います。

+0

本当ですか? %PSMODULEPATH%はグローバルなenvです。私のマシン上のcmd.exeシェルにも存在します。 –

+0

マシンをチェックするしかないので、エクスプローラから "CMD.exe"を実行すると、そのマシンは存在しません。 Powershellを実行すると、それが存在します。 Powershellからcmd.exeを実行すると、環境は新しいcmd.exeにコピーされ、そこに存在します。 – JasonTrue

+2

%PSMODULEPATH%は、私にとってWin7上のグローバルなenv変数です。 –

関連する問題