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

如何在Node.js中实现C#通过WMI查询已连接调制解调器的功能?

在Node.js中查询已连接的调制解调器(替代C# WMI方案)

刚好我之前也折腾过类似的需求,在Node.js里要实现和C#通过Win32_POTSModem查询调制解调器的功能,有两种靠谱的方案,完全能满足你要获取串口编号和设备类型的需求:

方案一:使用WMI客户端库直接交互

这种方式和你C#里的思路完全一致,直接通过Node.js库调用WMI接口,推荐使用node-wmi这个包(先安装依赖):

首先安装包:

npm install node-wmi

然后编写查询代码:

const wmi = require('node-wmi');

// 执行WMI查询,和C#的SELECT * FROM Win32_POTSModem等价
wmi.Query({
  class: 'Win32_POTSModem'
}, (err, results) => {
  if (err) {
    console.error('查询调制解调器时出错:', err);
    return;
  }

  console.log('已检测到的调制解调器列表:');
  results.forEach((modem, index) => {
    console.log(`\n第${index + 1}个设备:`);
    console.log(`设备名称: ${modem.Name}`);
    console.log(`关联串口: ${modem.AttachedTo}`); // 这就是你要的串口编号
    console.log(`设备描述/类型: ${modem.Description}`);
    console.log('----------------------------------------');
  });
});

这个库会直接返回Win32_POTSModem的所有属性,和C#里拿到的字段完全对应,能轻松获取你需要的串口和设备类型信息。

方案二:调用系统wmic命令解析输出

如果你不想依赖第三方库,也可以直接通过Node.js的子进程调用Windows原生的wmic命令,然后解析输出结果:

const { exec } = require('child_process');

// 执行wmic命令,指定获取需要的字段并以CSV格式输出(方便解析)
exec('wmic path Win32_POTSModem get Name,AttachedTo,Description /format:csv', (err, stdout, stderr) => {
  if (err) {
    console.error('执行命令出错:', stderr);
    return;
  }

  // 解析CSV格式的输出内容
  const rawLines = stdout.trim().split('\n');
  if (rawLines.length <= 1) {
    console.log('未检测到任何调制解调器');
    return;
  }

  const headers = rawLines[0].split(',').map(h => h.trim());
  const modems = rawLines.slice(1)
    .map(line => line.split(',').map(v => v.trim()))
    .filter(values => values[0]) // 过滤空行
    .map(values => {
      const modem = {};
      headers.forEach((header, idx) => {
        modem[header] = values[idx];
      });
      return modem;
    });

  console.log('已检测到的调制解调器列表:');
  modems.forEach((modem, index) => {
    console.log(`\n第${index + 1}个设备:`);
    console.log(`设备名称: ${modem.Name}`);
    console.log(`关联串口: ${modem.AttachedTo}`);
    console.log(`设备描述/类型: ${modem.Description}`);
    console.log('----------------------------------------');
  });
});

这个方法不需要额外安装任何包,完全依赖系统自带的命令,适合对依赖包有严格限制的场景。

为什么node-usb满足不了需求?

你提到的node-usb是用来枚举底层USB设备的,但调制解调器的串口编号、设备类型这类信息属于Windows系统层面的设备管理数据,是WMI维护的上层信息,并不是USB设备本身的属性。而且有些调制解调器可能不是USB接口的(比如老式的串口调制解调器),node-usb根本枚举不到这类设备,所以用WMI相关的方案才是正确的方向。

内容的提问来源于stack exchange,提问作者technoob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:39:17