如何在PowerShell二进制模块中捕获外部DLL的控制台输出?

时间:2013-03-04 13:54:51

标签: powershell powershell-v2.0

我正在创建一个PowerShell二进制模块,它使用第三方库(DLL),它输出到控制台。所以,基本上我希望我的二进制模块输出自己的消息和该DLL的控制台输出。

有可能吗?

因此,假设第三方API执行以下操作:

public static void SomeMethod() {
  ...
  Console.Write("Extracting the file...");
  ...
}

二进制模块调用它:

protected override void ProcessRecord() {
  ...
  this.WriteObject("Hello!");
  SomeClass.SomeMethod();
  this.WriteObject("Goodbye!");
}

我看到的输出是:

Hello!
Goodbye!

我希望看到的是:

Hello!
Extracting the file...
Goodbye!

1 个答案:

答案 0 :(得分:5)

查看System.Console.SetOut()方法,暂时将当前进程的标准输出设置为可以读取的文本编写器。在调用DLL之后,您将使用Console.OpenStandardOutput()将stdout重置为默认值。请查看SetOut主题页面上的示例。