如何从C#中读取PowerShell脚本stdout和stderr

时间:2014-02-07 18:49:57

标签: c# .net windows powershell

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

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

当我使用上面的代码时,我只得到部分标准输出。

1 个答案:

答案 0 :(得分:4)

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

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