1

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

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

有什么方法可以强制调用进程中的标准输出位于 cmd.exe 的标准输出流中,以便 Oracle 能够识别它并且我正在尝试构建的东西可以工作?

4

1 回答 1

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在命令末尾使用 a 清理临时文件。

您可能需要使用命令行来解决 Oracle 如何传递事物的任何怪癖 - 我的猜测是它是cmd.exe /c直接调用的,因此您可能可以忽略该部分。

于 2012-07-05T20:50:17.337 回答