PowerShell STDOUT格式问题

时间:2009-11-19 23:32:03

标签: powershell

有没有办法从PowerShell中的可执行文件中捕获STDOUT信息,而不会影响STDOUT进程的默认行为?每当我尝试从PowerShell中的可执行文件中捕获输出时,似乎在返回到主机/屏幕之前格式化STDOUT。此外,当要求捕获stdout输出时,PowerShell似乎也会逐行将数据提供给主机,只有在输出中找到换行符/回车符后才返回一行数据。

基本上,我希望有一种方法可以从PowerShell中的可执行文件中捕获STDOUT数据,而不会以任何方式更改STDOUT输出或操作。有谁知道目前这是否可行?

我已经阅读过,我知道,Start-Transcript / Stop-Transcript cmdlet的局限性。如果能够为我抓住这个输出,我的问题就解决了。

提前感谢任何可以提供帮助的人。

-M

2 个答案:

答案 0 :(得分:1)

一个简单的小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世界的每个字符!每500毫秒出现在屏幕上。输出在写入行结束符之前出现。根据与PowerShell团队的对话,我的理解是,在没有重定向的情况下运行时,控制台应用程序获得控制台句柄,以便他们可以直接写入绕过PowerShell和任何PowerShell格式的stdout。这样做是为了允许某些控制台应用程序(如edit.com)将彩色输出写入屏幕。

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

答案 1 :(得分:0)

我不知道tee-object会对你有帮助吗?

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