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

C# 如何从C中读取PowerShell脚本stdout和stderr#,c#,.net,windows,powershell,C#,.net,Windows,Powershell,我正在实现一个自定义PowerShell主机,需要读取PowerShell脚本的stdout和stderr。问题是,当我将通过调用管道返回的对象转换为字符串时,我并没有得到标准输出。但是,当我向管道中添加“out-string”cmdlet时,它工作得非常好。有没有不使用“out string”获取stdout和stderror的方法 this.currentPowerShell.AddScript(cmd); 收集结果=this.currentPowerShell.Invoke(); fore

我正在实现一个自定义PowerShell主机,需要读取PowerShell脚本的stdout和stderr。问题是,当我将通过调用管道返回的对象转换为字符串时,我并没有得到标准输出。但是,当我向管道中添加“out-string”cmdlet时,它工作得非常好。有没有不使用“out string”获取stdout和stderror的方法

this.currentPowerShell.AddScript(cmd);
收集结果=this.currentPowerShell.Invoke();
foreach(结果中的PSObject对象)
{
Console.WriteLine(obj.ToString());
}

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

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


对于
stderr
,您可以从
PowerShell.Streams.Error
属性中读取错误记录。如果您还需要一个可读的字符串,请在输出给用户之前通过字符串运行这些字符串。

能否详细说明您当前获得的输出以及您期望的结果?
this.currentPowerShell.AddScript(cmd);
Collection<PSObject> results = this.currentPowerShell.Invoke();
foreach (PSObject obj in results)
{
      Console.WriteLine(obj.ToString());
}