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