Powershell System.Management.Automation 参考程序集 4.0 中“Write-Host”输出的位置

Usm*_*man 6 c# pipeline runspace powershell-4.0

我正在将 System.Management.Automation 与参考程序集 4.0 和 C# 一起使用

我需要查看 Write-Host 的输出。文档说 Write-Host 将在输出流中输出。使用 powershell 4.0 的参考程序集时,在 C# 中获取 Write-Host 输出的输出流是什么?

我知道后来在 Powershell 5.0 版本中添加了信息管道,并且 Write-Host 和 Write-Information 始终将输出传输到信息管道。

但我需要使用 powershell 4.0 的参考程序集查看 Write-Host 的输出。使用以下代码,我无法在任何地方看到 Write-Host 的输出。不在输出处且不在输出集合中。

目前我已经订阅了以下流。

using (var powerShell = PowerShell.Create(iss))
{           
    var psScript = "Write-Host test input";
    powerShell.AddScript(psScript);

    powerShell.Streams.Debug.DataAdding += OnDebugDataAdding; 
    powerShell.Streams.Error.DataAdding += OnErrorAdding;
    powerShell.Streams.Warning.DataAdding += OnWarningAdding;
    powerShell.Streams.Verbose.DataAdding += OnVerboseAdding;

    var outputCollection = new PSDataCollection<PSObject>();
    outputCollection.DataAdding += OnOutputDataAdding; // all spitted outputs getting into outputCollection

    powerShell.Invoke(null, outputCollection);
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*mbo 4

我在如何在代码创建的 powershell shell(其中包含 Write-Host 命令)中执行脚本中有效地找到了同一问题的答案?

在 AddScript 调用之前,添加以下两条语句:

powerShell.AddScript("function Write-Host($out) {Write-Output $out}").Invoke();
powerShell.Commands.Clear();
Run Code Online (Sandbox Code Playgroud)