如何强制调用命令的STDOUT来调用cmd.exe的STDOUT?

时间:2012-07-05 19:52:08

标签: powershell windows-7 stdout powershell-v2.0 cmd

背景信息:Oracle Enterprise Manager具有“执行主机命令”的功能。如果进入该功能,我输入“dir c:\ temp”,然后输出窗口回显该命令,然后显示目录列表。如果进入该功能,我输入“powershell dir c:\ temp”,输出窗口只显示echo'd命令。没有目录列表。如果在目标机器上,我在两种情况下输入这两个命令,我得到echo'd命令,后跟目录列表。

我假设我在客户端的cmd.exe窗口中看到的内容混合了两个stdout流:一个来自cmd.exe本身,另一个来自调用过程(powershell dir c:\ temp)。 Oracle的东西似乎只识别cmd.exe的标准输出。

是否有某种方法可以强制调用进程中的stdout位于cmd.exe的stdout流中,以便Oracle识别它并且我尝试构建的东西会起作用?

1 个答案:

答案 0 :(得分:0)

我认为你不能直接将一个程序的输出管道输回到父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以便您可以将该部分关闭。< / p>