PowerShell标准输出格式问题

PowerShell标准输出格式问题,powershell,Powershell,是否有一种方法可以从powershell中的可执行文件中捕获标准输出信息,而不影响标准输出进程的默认行为?每当我试图从PowerShell中的可执行文件捕获输出时,似乎都会先格式化标准输出,然后再返回到主机/屏幕。此外,当要求PowerShell捕获标准输出时,PowerShell似乎会逐行将数据提供给主机,仅在输出中发现换行/换行符后返回一行数据 基本上,我希望能够从powershell中运行的可执行文件中捕获标准输出数据,而不必以任何方式更改标准输出或操作。有人知道目前这是否可行吗 我已经阅

是否有一种方法可以从powershell中的可执行文件中捕获标准输出信息,而不影响标准输出进程的默认行为?每当我试图从PowerShell中的可执行文件捕获输出时,似乎都会先格式化标准输出,然后再返回到主机/屏幕。此外,当要求PowerShell捕获标准输出时,PowerShell似乎会逐行将数据提供给主机,仅在输出中发现换行/换行符后返回一行数据

基本上,我希望能够从powershell中运行的可执行文件中捕获标准输出数据,而不必以任何方式更改标准输出或操作。有人知道目前这是否可行吗

我已经阅读并了解了Start-Transcript/Stop-Transcript cmdlet的限制。如果这能为我获取这个输出,我的问题就解决了

提前感谢任何能在这里提供帮助的人

-我不知道我是否能帮你

这是转移输出的一种方法,但我不知道它是否解决了您的问题。

一个简单的小C#程序显示PowerShell不会等待行终止符将输出写入stdout。编译并运行它:

using System;
using System.Threading;

class App 
{
    static void Main(string[] args)
    {
        string str = "Hello world!";
        Array.ForEach(str.ToCharArray(), 
                      ch => { Console.Write(ch);Thread.Sleep(500); });
        Console.WriteLine();
        Console.Write("Line start ");
        Thread.Sleep(2000);
        Console.WriteLine(" line term.");
    }   
}
此EXE显示Hello world的每个字符!每500毫秒出现在屏幕上。输出显示在写入行终止符之前。根据与PowerShell团队的对话,我的理解是,控制台应用程序在不重定向的情况下运行时,会获得一个控制台句柄,这样它们就可以绕过PowerShell和任何PowerShell格式直接写入stdout。这样做是为了允许某些控制台应用程序(如edit.com)将彩色输出写入屏幕


您看到的奇怪输出行为的EXE是什么?您是否可能看到控制台缓冲的效果?在CMD.EXE下运行时,EXE输出是否表现得更好?

tee对象非常好,但我注意到无法使用它附加到文件,因此您需要克服该限制。我已经尝试了tee对象;这显示了我在原始帖子中列出的相同症状。回显字符串变量中的值与我所做的不同。我正在运行一个Exchange 2007可执行文件,并试图在命令执行时捕获该命令的输出,而不影响标准输出功能/显示的默认行为。在您正在使用的Exchange Server 2007 exe的实现过程中,它正在“回显”您所说的,在PowerShell控制台上显示为文本的字节到标准输出。上面的代码编译为EXE并显示PowerShell不会等待行项。也许你可以详细说明一下你到底看到了什么。例如,您说您“试图捕获输出”-您的意思是您正在使用文件重定向,例如foo.exe>foo.txt?如果是这样,那么您不应该在主机/屏幕上看到stdout输出。如果您看到的是这种情况下的输出,那么它可能是stderr输出。