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

Go通过os/exec调用PowerShell运行.NET代码无输出报错问题咨询

问题原因

你的代码跑不通是几个低级错误叠加导致的:

  • Add-Type参数使用错误:-AssemblyName参数仅用于加载系统已注册的程序集,传入内嵌C#代码必须用-TypeDefinition参数,之前的传参方式PowerShell根本无法识别你写的C#代码。
  • PowerShell传参逻辑错误:-Command参数后只接受一段完整的脚本字符串,你把脚本内容拆成了多个独立的命令行参数,PowerShell会把后续参数当成启动配置项,不会作为命令执行。
  • C#代码语法错误:C#不允许直接定义游离的静态方法,你写的GetAllConnectedCameras方法没有放在公开静态类中,编译阶段就会失败。
  • 错误捕获缺失:你之前把CombinedOutput()返回的error直接丢弃,根本看不到PowerShell抛出的编译、执行错误,只能拿到空值或者乱码。
可直接运行的实现代码
package main

import (
	"fmt"
	"os/exec"
)

func main() {
	// 所有PowerShell逻辑整合为单个完整脚本字符串
	psScript := `
# 加载需要的系统程序集
Add-Type -AssemblyName System.Management

# 内嵌C#代码,用here-string包裹避免转义问题
Add-Type -TypeDefinition @'
using System.Collections.Generic;
using System.Management;

public static class CameraTool
{
    public static List<string> GetConnectedCameras()
    {
        List<string> cameraList = new List<string>();
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE PNPClass = 'Image' OR PNPClass = 'Camera'"))
        {
            foreach (ManagementObject dev in searcher.Get())
            {
                cameraList.Add(dev["Caption"].ToString());
            }
        }
        return cameraList;
    }
}
'@

# 调用C#方法输出结果
[CameraTool]::GetConnectedCameras()
`
	// 加-NoProfile、-ExecutionPolicy Bypass避免本机配置、执行策略干扰
	cmd := exec.Command("powershell.exe", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", psScript)
	output, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Printf("执行失败: %v\n错误信息: %s\n", err, string(output))
		return
	}
	fmt.Println("已连接摄像头列表:")
	fmt.Print(string(output))
}
关键说明
  • 用PowerShell的@'...'@here-string语法包裹C#代码,不需要额外转义内部的双引号,从根源上避免转义符导致的脚本错误。
  • 不要拆分-Command后的脚本内容,所有要执行的PowerShell逻辑必须拼成单个字符串传入,否则参数解析会完全混乱。
  • C#代码必须定义公开静态类包裹工具方法,否则Add-Type编译会直接失败。
  • 不要丢弃exec调用返回的error对象,执行出错时直接打印捕获到的输出内容,可以快速定位是脚本语法错还是权限问题。

内容的提问来源于stack exchange,提问作者Daniel D'champs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:18:21