繁体   English   中英

“写入主机”output 进入 Powershell System.Management.Automation 参考程序集 4.0 的位置

[英]Where "Write-Host" output goes in Powershell System.Management.Automation Reference assemblies 4.0

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

我需要查看 Write-Host 的 output。 文档说 Write-Host 将在 output stream 中输出。 What is the output stream for getting Write-Host output in C# while using reference assemblies of powershell 4.0.

我知道信息管道后来被添加到 Powershell 版本 5.0 和写入主机和写入信息总是 pipe output 到信息管道。

但是我需要查看 Write-Host 的 output,同时参考 powershell 4.0 的组件。 使用以下代码,我无法在任何地方看到 Write-Host 的 output。 不在 output 和 output collections 中。

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

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);
}

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

在您的 AddScript 调用之前,添加以下两个语句:

powerShell.AddScript("function Write-Host($out) {Write-Output $out}").Invoke();
powerShell.Commands.Clear();

如果您想继续使用管道 class,可以使用Command.MergeMyResults 方法 例如,要将所有类型的流重定向到管道 output:

private string RunScript(string scriptText) {

    Runspace runspace = RunspaceFactory.CreateRunspace();

    runspace.Open();

    Pipeline pipeline = runspace.CreatePipeline();
    pipeline.Commands.AddScript("Write-Host Test");
    pipeline.Commands[pipeline.Commands.Count-1]
       .MergeMyResults(PipelineResultTypes.All, PipelineResultTypes.Output)
    
    Collection < PSObject > results = pipeline.Invoke();

    runspace.Close();

    foreach(PSObject obj in results) {
        Console.WriteLine(obj.ToString());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM