将PowerShell脚本转为VBScript获取无线网卡信息遇问题求助
我来帮你一步步解决这个VBScript转换的问题,核心问题出在串口操作的方式和正则匹配的细节上:
问题根源分析
你的VBScript尝试用Scripting.FileSystemObject来读写串口,这是完全错误的用法——FSO是专门用于文件系统操作的,根本不支持串口通信。这就是为什么你会遇到The requested resource is in use错误,因为FSO无法正确管理串口的资源释放,同时这种访问方式本身就不符合串口通信的规范。另外正则匹配的逻辑也和PowerShell原脚本有偏差。
解决方案步骤
1. 改用.NET的SerialPort类实现串口通信
和PowerShell一样,VBScript可以直接调用.NET的System.IO.Ports.SerialPort类来实现串口操作,这才是正确的方式。你之前尝试过但没成功,是因为VBScript调用.NET对象的语法和PowerShell略有不同。
2. 修正正则匹配逻辑
原PowerShell脚本中$tVar -Match $sRegExp会匹配第一个符合条件的结果并放入$Matches[0],但你的VBScript循环所有匹配项后只保留最后一个,这和原逻辑不符。我们需要调整正则的Global属性,只取第一个匹配结果。
3. 修正后的完整VBScript脚本
' 定义串口参数(根据你的实际设备调整) strComPortNumber = "COM3" ' 替换为你的Modem串口 strComPortSpeed = 9600 ' 替换为匹配的波特率 Function fQueryModem(strQuery, strRegExp) Dim oComPort, tVar, oRE, oMatches ' 初始化SerialPort对象 Set oComPort = CreateObject("System.IO.Ports.SerialPort") oComPort.PortName = strComPortNumber oComPort.BaudRate = strComPortSpeed oComPort.Parity = 0 ' None对应枚举值0 oComPort.DataBits = 8 oComPort.StopBits = 1 ' One对应枚举值1 On Error Resume Next ' 捕获串口操作错误 oComPort.Open() If Err.Number <> 0 Then fQueryModem = "串口打开失败:" & Err.Description Err.Clear Exit Function End If On Error GoTo 0 ' 发送AT命令 oComPort.Write("AT") oComPort.Write(strQuery & vbCr) ' 用vbCr替代`r,VBScript的回车符 ' 等待设备响应 WScript.Sleep(50) ' 读取响应内容 tVar = oComPort.ReadExisting() oComPort.Close() ' 确保关闭串口释放资源 ' 清理响应内容 tVar = Trim(Replace(tVar, "OK", "")) ' 正则匹配处理 If strRegExp <> "" Then Set oRE = New RegExp oRE.IgnoreCase = True oRE.Global = False ' 只匹配第一个结果,和PowerShell逻辑对齐 oRE.Pattern = strRegExp Set oMatches = oRE.Execute(tVar) If oMatches.Count > 0 Then fQueryModem = oMatches(0).Value ' 取第一个匹配项 Else fQueryModem = "未找到匹配内容" End If Else fQueryModem = tVar End If End Function ' 调用函数获取信息 strMEID = fQueryModem("+CGSN","\d{15}") strModemModel = fQueryModem("+CGMM","") strPhoneNumber = fQueryModem("+CNUM","\d{11}") strSIM = fQueryModem("+ICCID","\d{20}") strFirmwareDate = fQueryModem("+GMR","\d{4}/\d{2}/\d{2}") ' 输出结果用于测试 WScript.Echo "MEID: " & strMEID WScript.Echo "Modem型号: " & strModemModel WScript.Echo "手机号: " & strPhoneNumber WScript.Echo "SIM卡ICCID: " & strSIM WScript.Echo "固件日期: " & strFirmwareDate
额外注意事项
- 请确保
strComPortNumber和strComPortSpeed与你的Modem实际参数匹配,波特率、奇偶校验等参数错误会导致无法通信。 - 运行脚本时可能需要管理员权限,避免串口访问被权限限制。
- 测试前确认没有其他程序占用该串口(比如串口调试工具),否则会出现资源占用错误。
内容的提问来源于stack exchange,提问作者lmoraguez
相关产品推荐
相关产品推荐

