如何在C#代码中获取PowerShell执行无效命令时的错误输出?
在C#中获取PowerShell执行的错误输出
你遇到的这个问题很常见——你当前的代码只获取了PowerShell执行成功时的输出结果,而执行产生的错误信息会被单独存放在PowerShell实例的Streams.Error集合里,所以之前的代码看不到任何错误提示。
要获取这些错误信息,只需要在调用Invoke()后检查并遍历Streams.Error集合即可,同时还要修正你之前直接打印PSOutput集合本身的问题——应该遍历集合里的每个元素来输出内容,不然只会打印集合的类型名称,而不是实际的执行结果。
修改后的完整代码如下:
using System.Collections.ObjectModel; using System.Management.Automation; class Program { static void Main() { using (PowerShell PowerShellInst = PowerShell.Create()) { PowerShellInst.AddScript("abc"); Collection<PSObject> PSOutput = PowerShellInst.Invoke(); // 处理错误输出 if (PowerShellInst.Streams.Error.Count > 0) { Console.WriteLine("执行过程中出现错误:"); foreach (var errorRecord in PowerShellInst.Streams.Error) { Console.WriteLine(errorRecord.ToString()); } } // 处理成功输出(如果有) if (PSOutput.Count > 0) { Console.WriteLine("执行成功输出:"); foreach (var outputItem in PSOutput) { Console.WriteLine(outputItem.ToString()); } } } } }
简单说明几个关键点:
PowerShell.Streams.Error:专门存储执行过程中产生的所有错误,每个元素是ErrorRecord类型,调用ToString()就能得到和PowerShell控制台完全一致的错误提示。- 记得添加必要的命名空间:
System.Collections.ObjectModel和System.Management.Automation(需要引用System.Management.Automation程序集)。 - 分开处理成功输出和错误输出,能让结果展示更清晰。
这样修改后,执行代码就能看到和PowerShell环境中一样的错误信息了。
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

