Преобразование скрипта Powershell в VBScript для получения информации о воздушной карте - PullRequest
0 голосов
/ 25 мая 2018

У меня возникли проблемы с преобразованием этого скрипта 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}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...