如何在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
相关产品推荐
相关产品推荐

