You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:07:31