Powershell 如何强制调用命令';s STDOUT调用cmd.exe';什么是标准?

Powershell 如何强制调用命令';s STDOUT调用cmd.exe';什么是标准?,powershell,windows-7,stdout,powershell-2.0,cmd,Powershell,Windows 7,Stdout,Powershell 2.0,Cmd,上下文:Oracle Enterprise Manager具有“执行主机命令”的功能。如果在该功能中输入“dir c:\temp”,则输出窗口将响应该命令,然后显示目录列表。如果在该功能中输入“powershell dir c:\temp”,则输出窗口仅显示echo命令。没有目录列表。如果在目标机器上输入这两个命令,在这两种情况下,我都会得到echo'd命令,后面是目录列表 我假设在客户端的cmd.exe窗口中看到的是两个stdout流:一个来自cmd.exe本身,另一个来自调用的进程(powe

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

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


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

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

结果是我也需要cmd.exe/c。我以前的批处理编程书(“MS-DOS批处理文件编程,包括OS/2”)中没有符号。对于可能需要它的人,这里有一个稍新的参考: