如何从C#读取PowerShell脚本的标准输出和错误输出

3

我正在实现一个自定义的PowerShell主机,需要读取PowerShell脚本的stdout和stderr。问题是,当我将调用管道返回的对象转换为字符串时,得不到stdout。然而,当我向管道中添加“out-string”命令时,它可以完美地工作。有没有办法在不使用“out-string”的情况下获取stdout和stderror?

this.currentPowerShell.AddScript(cmd);
Collection<PSObject> results = this.currentPowerShell.Invoke();
foreach (PSObject obj in results)
{
      Console.WriteLine(obj.ToString());
}

当我使用上述代码时,我只能获得部分的标准输出。

你能详细说明一下你目前得到的输出以及你期望得到什么吗? - tnw
1个回答

4

PowerShell将stdout输出到另一个exe中,通过获取对象并投影其字符串视图来合成。PowerShell的本地输出是一系列对象流。如果您想要这些对象的字符串版本,则使用Out-String。然而,从C#的角度来看,直接处理PowerShell输出的对象通常更有用。

对于stderr,您可以从PowerShell.Streams.Error属性中读取ErrorRecords。如果您也想要人类可读的字符串,则在将它们输出给用户之前运行它们通过Out-String。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接