У меня возникли проблемы с преобразованием этого скрипта Powershell в VBScript.
Все мои операторы Echo в начале моего VBScript отображают правильные данные, поэтому я знаю, что мой первоначальный запрос WMI работает, но я не уверен, что я делаю неправильно в моей функции fQueryModem
.
Я видел, что другие сайты предлагают MSCOMMLIB
или System.IO.Port
Класс SerialPort, но я попробовал эти опции и не смог заставить их работать.
Когда я впервые запускаю скрипт, яне получаю ошибки, но нет выходных данных, когда я пытаюсь отобразить значения, хранящиеся в переменных, вызвавших функцию.При любом последующем запуске сценария выдается эта ошибка: "The requested resource is in use Code: 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}")