1

コンテキスト:Oracle Enterprise Managerには、「ホスト・コマンドを実行する」機能があります。その機能に「dirc:\ temp」と入力すると、出力ウィンドウにコマンドがエコーされ、ディレクトリリストが表示されます。その機能に「powershelldirc:\ temp」と入力すると、出力ウィンドウにechoされたコマンドのみが表示されます。ディレクトリリストはありません。ターゲットマシンでこれらの2つのコマンドを入力すると、どちらの場合も、echo'dコマンドの後にディレクトリリストが表示されます。

クライアントのcmd.exeウィンドウに表示されるものは、2つのstdoutストリームをブレンドしていると仮定します。1つはcmd.exe自体からのもので、もう1つは呼び出されたプロセス(powershell dir c:\ temp)からのものです。Oracleのものは、cmd.exeのstdoutのみを認識しているようです。

呼び出されたプロセスからのstdoutをcmd.exeのstdoutストリームに強制的に入れて、Oracleがそれを認識し、ビルドしようとしているものが機能するようにする方法はありますか?

4

1 に答える 1

0

1つのプログラムからの出力を親cmd.exeのSTDOUTに直接パイプで戻すことはできないと思います。これは、Oracleが何らかのレベルで行っていることを前提としています。

そうは言っても、次のような賢い方法を試すことができます。

cmd /c "powershell -Command ""& echo Hello" > %TEMP%\a.txt & TYPE %TEMP\a.txt

基本的に、これはPowerShellからの出力をキャプチャし、それを一時ファイルに配置してから、そのファイルをcmd.exeのSTDOUTにダンプして戻します。& DEL %TEMP%\a.txtいい感じは、コマンドの最後にを付けて一時ファイルをクリーンアップすることです。

Oracleが物事をどのように伝えているかについての癖を説明するために、おそらくコマンドラインをいじくり回す必要がありcmd.exe /cます。おそらく、その部分を省略できるように、直接呼び出していると思います。

于 2012-07-05T20:50:17.337 に答える