Symantec Version Checker

  • Hallo,
    Habe bei einigen Clients eine fehlermeldung
    GUI.au3 (32) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $strVersion = $NAVMajorVersion[1] & $NAVMajorVersion[2] & "." & $NAVMajorVersion[3] & "." & $NAVMajorVersion[4] & "." & $NAVMinorVersion
    $strVersion = $NAVMajorVersion[1] & $NAVMajorVersion[2] & "." & $NAVMajorVersion[3] & "." & ^ ERROR
    ->11:55:57 AutoIT3.exe ended.rc:1

    Bei anderen gehts eine idee?

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _SymantecGetVersion()

    [/autoit] [autoit][/autoit] [autoit]

    Local $Hostname = ""
    Local Const $NAVVersionKey = "HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6\CurrentVersion"
    Local Const $NAVVersionValue = "ProductVersion"
    Local Const $NAVEngineKey = "HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6\CurrentVersion"
    Local Const $NAVEngineValue = "ScanEngineVersion"
    Local Const $NAVDefinitionsKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Symantec\SharedDefs"
    Local Const $NAVDefinitionsValue = "NAVCORP_70"
    Local $NAVMajorVersion
    Local $NAVMinorVersion
    Local $strVersion
    Local $strEngine
    Local $strDefinitions
    Local $tmp, $tmp2, $tmp3
    Local $tmpArray

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $tmp = RegRead("\\" & $Hostname & "\" & $NAVVersionKey, $NAVVersionValue)
    $tmp2 = RegRead("\\" & $Hostname & "\" & $NAVEngineKey, $NAVEngineValue)
    $tmp3 = RegRead("\\" & $Hostname & "\" & $NAVDefinitionsKey, $NAVDefinitionsValue)

    [/autoit] [autoit][/autoit] [autoit]

    If $tmp = "" Then
    $strVersion = "Unavailable"
    Else
    $NAVMinorVersion = Dec(StringLeft(Hex($tmp), 4))
    $NAVMajorVersion = StringSplit(Dec(StringRight(Hex($tmp), 4)),"")
    $strVersion = $NAVMajorVersion[1] & $NAVMajorVersion[2] & "." & $NAVMajorVersion[3] & "." & $NAVMajorVersion[4] & "." & $NAVMinorVersion
    EndIf
    If $tmp2 = "" Then
    $strEngine = "Unavailable"
    Else
    $strEngine = Dec(StringMid(Hex($tmp2), 1, 2)) & "." & Dec(StringMid(Hex($tmp2), 3, 2)) & "." & Dec(StringMid(Hex($tmp2), 5, 2)) & "." & Dec(StringMid(Hex($tmp2), 7, 2))
    EndIf
    If $tmp3 = "" Then
    $strDefinitions = "Unavailable"
    Else
    $tmpArray = StringSplit($tmp3, "\")
    $strDefinitions = StringMid($tmpArray[$tmpArray[0]], 7, 2) & "/" & StringMid($tmpArray[$tmpArray[0]], 5, 2) & "/" & StringMid($tmpArray[$tmpArray[0]], 1, 4) & " rev." & StringMid($tmpArray[$tmpArray[0]], 10, 3)
    EndIf
    Local $Array[3] = [$strDefinitions,$strVersion,$strEngine]
    Return $Array
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    $arr2 = _SymantecGetVersion()

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($arr2) Then
    msgbox(1,"","Definitions date: " & $arr2[0] & @CRLF & _
    "Software version: " & $arr2[1] & @CRLF & _
    "Engine version: " & $arr2[2])
    Else
    MsgBox(1,"","Failed with error code: " & $arr2)
    EndIf

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hallo subzero007,

    bau mal direkt nach

    [autoit]

    $NAVMajorVersion = StringSplit(Dec(StringRight(Hex($tmp), 4)),"")

    [/autoit]


    eine Ausgabe des Arrays ein also:

    [autoit]

    _ArrayDisplay(NAVMajorVersion)

    [/autoit]


    und vergiss nicht das

    [autoit]

    #Include <Array.au3>

    [/autoit]


    am Anfang einzufügen. An der Ausgabe solltest du erkennen was an diesem Client anders ist. Oder nimm RegEdit und schau dir die Schlüssel damit an

    mfg (Auto)bert

  • Ich glaube ich habe dich falsch verstanden:

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _SymantecGetVersion()

    [/autoit] [autoit][/autoit] [autoit]

    Local $Hostname = ""
    Local Const $NAVVersionKey = "HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6\CurrentVersion"
    Local Const $NAVVersionValue = "ProductVersion"
    Local Const $NAVEngineKey = "HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6\CurrentVersion"
    Local Const $NAVEngineValue = "ScanEngineVersion"
    Local Const $NAVDefinitionsKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Symantec\SharedDefs"
    Local Const $NAVDefinitionsValue = "NAVCORP_70"
    Local $NAVMajorVersion
    Local $NAVMinorVersion
    Local $strVersion
    Local $strEngine
    Local $strDefinitions
    Local $tmp, $tmp2, $tmp3
    Local $tmpArray

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $tmp = RegRead("\\" & $Hostname & "\" & $NAVVersionKey, $NAVVersionValue)
    $tmp2 = RegRead("\\" & $Hostname & "\" & $NAVEngineKey, $NAVEngineValue)
    $tmp3 = RegRead("\\" & $Hostname & "\" & $NAVDefinitionsKey, $NAVDefinitionsValue)

    [/autoit] [autoit][/autoit] [autoit]

    If $tmp = "" Then
    $strVersion = "Unavailable"
    Else
    $NAVMinorVersion = Dec(StringLeft(Hex($tmp), 4))
    $NAVMajorVersion = StringSplit(Dec(StringRight(Hex($tmp), 4)),"")
    $strVersion = $NAVMajorVersion[1] & $NAVMajorVersion[2] & "." & $NAVMajorVersion[3] & "." & $NAVMajorVersion[4] & "." & $NAVMinorVersion
    EndIf
    If $tmp2 = "" Then
    $strEngine = "Unavailable"
    Else
    $strEngine = Dec(StringMid(Hex($tmp2), 1, 2)) & "." & Dec(StringMid(Hex($tmp2), 3, 2)) & "." & Dec(StringMid(Hex($tmp2), 5, 2)) & "." & Dec(StringMid(Hex($tmp2), 7, 2))
    EndIf
    If $tmp3 = "" Then
    $strDefinitions = "Unavailable"
    Else
    $tmpArray = StringSplit($tmp3, "\")
    $strDefinitions = StringMid($tmpArray[$tmpArray[0]], 7, 2) & "/" & StringMid($tmpArray[$tmpArray[0]], 5, 2) & "/" & StringMid($tmpArray[$tmpArray[0]], 1, 4) & " rev." & StringMid($tmpArray[$tmpArray[0]], 10, 3)
    EndIf
    Local $Array[3] = [$strDefinitions,$strVersion,$strEngine]
    Return $Array
    $arr2 = _SymantecGetVersion()
    $NAVMajorVersion = StringSplit(Dec(StringRight(Hex($tmp), 4)),"")
    _ArrayDisplay(NAVMajorVersion)
    EndFunc
    $arr2 = _SymantecGetVersion()

    If IsArray($arr2) Then
    msgbox(1,"","Definitions date: " & $arr2[0] & @CRLF & _
    "Software version: " & $arr2[1] & @CRLF & _
    "Engine version: " & $arr2[2])
    Else
    MsgBox(1,"","Failed with error code: " & $arr2)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    kriege folgenden fehler
    GUI4.au3(50,30) : ERROR: syntax error
    _ArrayDisplay(NAVMajorVersion)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    GUI4.au3(50,30) : ERROR: _ArrayDisplay() called with expression on Const ByRef-param(s).
    _ArrayDisplay(NAVMajorVersion)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    Array.au3(315,148) : REF: definition of _ArrayDisplay().
    Func _ArrayDisplay(Const ByRef $avArray, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|")
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    F:\autoit\entwicklung\symantec\GUI4.au3 - 2 error(s), 0 warning(s)

    in der registry habe ich auch geprüft ist alles indentisch ???

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,

    Du hast Ihn schon richtig verstanden. Dein Array ist aber $NAVMajorVersion.

    ;-))

    Stefan

  • komisch ist folgedes auszug aus regedit
    geht nicht "ProductVersion"=dword:0150032b
    geht "ProductVersion"=dword:177a03f8

    sind die gleichen werte was meint ihr wo ich suchen sollte oder den fehler abfangen kann?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hallo subzero007,

    dass ich das "$" für die Variable vergessen habe tut mir leid, aber wie du bereits weist schreibe ich bei kleineren Codeschnipsel online hier im Forum. Wenn ich das berichtige bekomme ich bei beiden Werten keine Fehlermeldung, allerdings auch keine Versionsnummern.
    Zur Lösung des eigentlichen Problems stelle bitte TXT-Files ein für die Ergebnisse aller 3 RegReads, dann schau ich mir es mal genauer an,

    mfg (Auto)Bert

  • Problem gelösst ;)
    war ein narren fehler traue mich nicht mal zu sagen was das problem war ;kein recht jetzt habe ich si und es klappt
    aber eine frage habbe ich wenn der remote pc aus dann liest doch die regread den lokalen aus oder?
    kann man das unterbinden oder abfangen?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    • Offizieller Beitrag

    komisch ist folgedes auszug aus regedit
    geht nicht "ProductVersion"=dword:0150032b
    geht "ProductVersion"=dword:177a03f8

    sind die gleichen werte was meint ihr wo ich suchen sollte oder den fehler abfangen kann?

    Das sind doch nicht die gleichen Werte:

    0150032b = 8.1.1.336
    177a03f8 = 10.1.6.6010

    Wie Du siehst ist bei 0150032b die MayorVersion vorne 1stellig und deshalb gibt $NAVMajorVersion[4] auch einen Fehler.

    Probiers mal so:

    Spoiler anzeigen
    [autoit]

    Func _SymantecGetVersion()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $Hostname = ""
    Local Const $NAVVersionKey = "HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6\CurrentVersion"
    Local Const $NAVVersionValue = "ProductVersion"
    Local Const $NAVEngineKey = "HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6\CurrentVersion"
    Local Const $NAVEngineValue = "ScanEngineVersion"
    Local Const $NAVDefinitionsKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Symantec\SharedDefs"
    Local Const $NAVDefinitionsValue = "NAVCORP_70"
    Local $NAVMajorVersion
    Local $NAVMinorVersion
    Local $strVersion
    Local $strEngine
    Local $strDefinitions
    Local $tmp, $tmp2, $tmp3
    Local $tmpArray

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $tmp = RegRead("\\" & $Hostname & "\" & $NAVVersionKey, $NAVVersionValue)
    $tmp2 = RegRead("\\" & $Hostname & "\" & $NAVEngineKey, $NAVEngineValue)
    $tmp3 = RegRead("\\" & $Hostname & "\" & $NAVDefinitionsKey, $NAVDefinitionsValue)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite($tmp & " -> " & Hex($tmp) & @CRLF)
    If $tmp = "" Then
    $strVersion = "Unavailable"
    Else
    $NAVMinorVersion = Dec(StringLeft(Hex($tmp), 4))
    $NAVMajorVersion = StringSplit(Dec(StringRight(Hex($tmp), 4)), "")
    If Dec(StringRight(Hex($tmp), 4)) < 1000 Then
    $strVersion = $NAVMajorVersion[1] & "." & $NAVMajorVersion[2] & "." & $NAVMajorVersion[3] & "." & $NAVMinorVersion
    Else
    $strVersion = $NAVMajorVersion[1] & $NAVMajorVersion[2] & "." & $NAVMajorVersion[3] & "." & $NAVMajorVersion[4] & "." & $NAVMinorVersion
    EndIf
    EndIf
    If $tmp2 = "" Then
    $strEngine = "Unavailable"
    Else
    $strEngine = Dec(StringMid(Hex($tmp2), 1, 2)) & "." & Dec(StringMid(Hex($tmp2), 3, 2)) & "." & Dec(StringMid(Hex($tmp2), 5, 2)) & "." & Dec(StringMid(Hex($tmp2), 7, 2))
    EndIf
    If $tmp3 = "" Then
    $strDefinitions = "Unavailable"
    Else
    $tmpArray = StringSplit($tmp3, "\")
    $strDefinitions = StringMid($tmpArray[$tmpArray[0]], 7, 2) & "/" & StringMid($tmpArray[$tmpArray[0]], 5, 2) & "/" & StringMid($tmpArray[$tmpArray[0]], 1, 4) & " rev." & StringMid($tmpArray[$tmpArray[0]], 10, 3)
    EndIf
    Local $Array[3] = [$strDefinitions, $strVersion, $strEngine]
    Return $Array
    EndFunc ;==>_SymantecGetVersion

    [/autoit] [autoit][/autoit] [autoit]

    $arr2 = _SymantecGetVersion()

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($arr2) Then
    MsgBox(1, "", "Definitions date: " & $arr2[0] & @CRLF & _
    "Software version: " & $arr2[1] & @CRLF & _
    "Engine version: " & $arr2[2])
    Else
    MsgBox(1, "", "Failed with error code: " & $arr2)
    EndIf

    [/autoit]
  • falsch ausgedrückt der gleiche schlüssel aber jetzt klappt alles danke für eure mühe

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."