将Powershell脚本转换为VBScript以获取aircard信息

将Powershell脚本转换为VBScript以获取aircard信息,powershell,vbscript,Powershell,Vbscript,将此Powershell脚本转换为VBScript时遇到一些问题 VBScript开头的所有Echo语句都显示了正确的数据,因此我知道我的初始WMI查询正在工作,但我不确定我的fQueryModem函数中有何错误 我曾看到其他网站建议使用MSCOMMLIB或System.IO.PortSerialPort类,但我尝试了这些选项,但都没有成功 当我第一次启动脚本时,我没有收到任何错误,但是当我尝试回显调用函数的变量中存储的值时,没有输出。脚本的任何后续启动都会引发此错误:“请求的资源正在使用中代码

将此Powershell脚本转换为VBScript时遇到一些问题

VBScript开头的所有Echo语句都显示了正确的数据,因此我知道我的初始WMI查询正在工作,但我不确定我的
fQueryModem
函数中有何错误

我曾看到其他网站建议使用
MSCOMMLIB
System.IO.Port
SerialPort类,但我尝试了这些选项,但都没有成功

当我第一次启动脚本时,我没有收到任何错误,但是当我尝试回显调用函数的变量中存储的值时,没有输出。脚本的任何后续启动都会引发此错误:
“请求的资源正在使用中代码:800700AA Source:(null)”

此外,我不确定是否正确转换了脚本中采用正则表达式模式的部分,并将其与
tVar
匹配

请,任何帮助或建议都是欢迎的,因为这已经让我挠头一周了

Powershell:

Function fQueryModem($sQueryString, $sRegExp) {
    $oComPort = New-Object System.IO.Ports.SerialPort $sComPortNumber,$sComPortSpeed,None,8,1
    $oComPort.Open()
    $oComPort.Write("AT")
    $oComPort.Write($sQueryString + "`r")
    Start-Sleep -m 50
    $tVar = $oComPort.ReadExisting()
    $tVar = ($tVar -replace "OK","").trim()
    $oComPort.Close()

    If (!($sRegExp -eq "")) {$tVar -Match $sRegExp|Out-Null; $tVar = $Matches[0]}
    return $tVar
}


#Populate Variables using fQueryModem Function Call
$sMEID = fQueryModem "+CGSN" "\d{15}"
$sModemModel = fQueryModem "+CGMM" "" #Match Everything
$sPhoneNumber = fQueryModem "+CNUM" "\d{11}"
$sSIM = fQueryModem "+ICCID" "\d{20}"
#$sFirmwareDate = fQueryModem "+GMR" "\d{4}/\d{2}/\d{2}"
$sFirmwareDate = fQueryModem "+GMR" ""
VBScript:

Function fQueryModem(strQuery, strRegExp)

    Const ForReading = 1
    Const ForWriting = 2
    Const TristateFalse = 0

    Dim oRE, oMatches, tVar, fsoR, comR, fsoW, comW

    fQueryModem = ""

    Set fsoW = CreateObject("Scripting.FileSystemObject")
    Set comW = fsoW.OpenTextFile(strComPortNumber & ":" & strComPortSpeed & ",N,8,1", ForWriting, False, TristateFalse)
    comW.Write "AT"
    comW.Write strQuery & "`r"
    comW.Close()

    wscript.sleep 50

    Set fsoR = CreateObject("Scripting.FileSystemObject")
    Set comR = fsoR.OpenTextFile(strComPortNumber & ":" & strComPortSpeed & ",N,8,1", ForReading, False, TristateFalse)
    tVar = comR.ReadAll
    tVar = Trim(Replace(tVar,"OK",""))
    comR.Close()


    If strRegExp <> "" Then
        Set oRE = New RegExp

        oRE.Global = True
        oRE.IgnoreCase = True
        oRE.Pattern = strRegExp
        Set oMatches = oRE.Execute(tVar)

        Dim oMatch
        For Each oMatch In oMatches
            fQueryModem = oMatch.Value
        Next
    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}")
函数fQueryModem(strQuery,stregexp)
常数ForReading=1
写入常数=2
常数三态假=0
Dim oRE、oMatches、tVar、fsoR、comR、fsoW、comW
fQueryModem=“”
设置fsoW=CreateObject(“Scripting.FileSystemObject”)
设置comW=fsoW.OpenTextFile(strComPortNumber&“:”&strComPortSpeed&“,N,8,1”,用于写入、假、三态假)
请写“在”
com.Write strQuery&“r”
comW.Close()
wscript.sleep 50
设置fsoR=CreateObject(“Scripting.FileSystemObject”)
设置comR=fsoR.OpenTextFile(strComPortNumber&“:”&strComPortSpeed&“,N,8,1”,用于读取、假、三态假)
tVar=comR.ReadAll
tVar=饰件(更换(tVar,“正常”和“”)
关闭命令()
如果是strRegExp“”,则
Set oRE=New RegExp
.Global=True
oRE.IgnoreCase=True
矿石模式=stregexp
设置oMatches=oRE.Execute(tVar)
暗匹配
对于oMatch中的每个oMatch
fQueryModem=oMatch.Value
下一个
其他的
fQueryModem=tVar
如果结束
端函数
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}”)

您遇到了什么问题?错误消息?意外的行为?还有别的吗?请编辑问题并添加更多详细信息。不要将代码或错误粘贴为注释,因为它们很难阅读。请将您的问题归结为一个问题,没有人愿意阅读两大块代码@vonPryz-我已经用你和James C.的建议更新了我的问题。。