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

Yan*_*nko 3 powershell powershell-2.0

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

可能吗?

所以,让我们说第三方API执行以下操作:

public static void SomeMethod() {
  ...
  Console.Write("Extracting the file...");
  ...
}
Run Code Online (Sandbox Code Playgroud)

二进制模块调用它:

protected override void ProcessRecord() {
  ...
  this.WriteObject("Hello!");
  SomeClass.SomeMethod();
  this.WriteObject("Goodbye!");
}
Run Code Online (Sandbox Code Playgroud)

我看到的输出是:

Hello!
Goodbye!
Run Code Online (Sandbox Code Playgroud)

我想看到的是:

Hello!
Extracting the file...
Goodbye!
Run Code Online (Sandbox Code Playgroud)

Kei*_*ill 5

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