Update-Status von AviraUpdate auslesen

  • Hallo, liebe Autoitler *gg*,
    habe als Newbie ein für Euch sicher leichtes Problemchen. Bei meinem Programm - Update von Avira Premium will ich nur die Meldung auslesen, ob was aktualiesiert wurde oder ich auf dem aktuellen Stand bin. Mit der Auto-It-Info bekomme ich den Text, mit meiner App nicht. Ich weiß auch nicht, wie ich das zeitlich exakt mache, ohne das Update zu unterbrechen. Könnte nämlich sein, das ich die Meldung erst abfrage, wenn Avira fertig ist? Der Gedanke kam mir eben.... Bitte um Info und Hilfe, vielen lieben Dank im Voraus.
    MFG
    WillyWu.

    Und hier nun das Kunstwerk.....

    Spoiler anzeigen


    ;Avira Update
    $AvUpd="update.exe"
    $AvUpdP='DM = "0" / NOMESSAGEBOX / ReceiveTimeout = 120'
    $AvUpdPf="M:\Program Files\Avira\AntiVir Desktop\"
    ;ShellExecuteWait ("update.exe",'DM = "0" / NOMESSAGEBOX / ReceiveTimeout = 120',"M:\Program Files\Avira\AntiVir Desktop\") ;funktioniert
    ShellExecute($AvUpd,$AvUpdP,$AvUpdPf)
    Sleep (5000)
    ; Skript wartet bis Notepad beendet ist.
    $text = WinGetText($AvUpdPf&$AvUpd, "")
    MsgBox(0, "Der gelesene Text lautet:", $text)


    MsgBox(0,"AVIRAUpdate","Avira Update ok")

    ;link auf desktop & auslesem!

    PS.: Das Update selber funktionier problemlos so...

    Einmal editiert, zuletzt von WillyWu (12. September 2010 um 07:48)

  • Hallo WillyWu,

    ich habe zwar nur die Personal (Free)-Version, habe mir dort über den Planer das Update eingerichtet (geht auch mehrmals am Tag), Avira protokoliert dies unter Ereignisse, diese kann man exportieren:

    Zitat

    Exportierte Ereignisse:

    16.08.2010 16:43 [Updater] Update erfolgreich durchgeführt
    Update auf Computer ACER1 (10.210.48.134) von http://62.146.66.187/update wurde
    erfolgreich durchgeführt.
    Es sind keine neuen Engine/VDF Dateien verfügbar.

    Auch in der Registry hinterlässt ein Update seine Spuren:

    Zitat

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Avira\AntiVir Desktop]
    "UpdateInProgress"=dword:00000000
    "LastUpdate"=dword:4c694ea8

    wie man daraus allerdings auf 16.08.2010 16:43 kommt habe ich noch nicht probiert, sieht aber nach vergangenen Sekunden seit Epoch (01.01.1970 00:00:00) aus.

    du könntest also einfach nur die Registry auslesen, wenn sich der Wert für UpdateInProgress (zuerst auf dword:00000001 = Updateprüfung gestartet) auf dword:00000000 ändert ist das Update beendet und du kannst dnn Schlüssel LastUpdate auslesen und mit _DateAdd siehe Hilfe umrechnen (ist aber die aktuelle Uhrzeit, zumindest unmittelbar nach dem Update, etl.Sommerzeit+Zeizone Differenz)

    mfg (auto)Bert

  • Hallo, AutoBert,

    danke für rasche Antwort. Ja, so könnte es auch gehen, auch wenn ich nicht weiß, wann das in der Registry geändert wird bzw. wie ich das in mein einbaue. Wenn ich das live überprüfe, muss ich auch das in der Registry nochmal auf und zu klappen, damit der geänderte Status angezeigt wird.... Naja, bin eben ein Anfänger *gg*

    Trotzdem wäre mir der andere Ansatz lieber, habe es gerade noch mal probiert und brauche eigentlich nur den Zeitpunkt, wann sich der Button-Text von Abbrechen in Beenden ändert. Ginge das irgendwie mit wait? Und der If-Abfrage (die anderen Versionen sind mir nicht so geläufig - mild umschrieben...). Also nach dem Prinzip: warte solange bis der Text auf dem Knopf1 sich von "Abbrechen" in "Beenden" ändert und danach sollte es mit Gettext funktionieren, denke ich?!?

    Das sagt mit das Info-Tool..

    Spoiler anzeigen

    >>>> Window <<<<
    Title: Updater
    Class: #32770
    Position: 274, 175
    Size: 476, 418
    Style: 0x94CA00CC
    ExStyle: 0x00050101
    Handle: 0x00140436

    >>>> Control <<<<
    Class: Button
    Instance: 1
    ClassnameNN: Button1
    Name:
    Advanced (Class): [CLASS:Button; INSTANCE:1]
    ID: 2
    Text: Beenden
    Position: 158, 362
    Size: 75, 23
    ControlClick Coords: 46, 16
    Style: 0x5001000B
    ExStyle: 0x00000004
    Handle: 0x00070414

    >>>> Mouse <<<<
    Position: 481, 575
    Cursor ID: 0
    Color: 0xF7F7F7

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<

    >>>> Visible Text <<<<
    Beenden
    Report
    Status:
    Progress1
    Verstrichene Zeit:
    Verbleibende Zeit:

    Danke erneut im Voraus für jeden Denkanstoß. Ach ja, würde das warten auch funktionieren, wenn sich ein nicht anklickbarer Button in einen anklickbaren ändert? Und wie frage ich das ab?

    Thx und LG
    Willy.

  • Ich wollte eigentlich darauf hinaus, dass du allein über die Registry feststellen kannst wann das letzte Update war, dies sollte zur Info doch reichen, Wenn ich schauen will welchen Stand mein Avira hat schau ich in den Status. Meine Update von Avira erledige ich über den Planer von AVIRA Antivir. Ich sehe also keinen Bedarf für ein solches Programm,

    mfg autoBert

  • Hallo, AutoBert,

    meine Güte, bist Du schnell - danke für rasche Antwort. Ok, bei einem Pc gebe ich Dir recht, wenn man aber zwischen 7 und 11 PC zu bearbeiten hat - bei denen nicht nur Avira zu bearbeiten ist -, ist man für jede Erleichterung dankbar. Und ich brauche jetzt ja nur zu wissen, wie ich heraus bekomme, ob sich der Status des Buttons 1 (also der Text darauf geändert hat), der Zeitpunkt des Updates ist nicht ganz so gravierend (da von mir mit abhängig), sondern ob Update geklappt hat und was er gemacht hat. Das sehe ich am einfachsten beim direkten Auslesen, was auch funktioniert, wenn ich noch lerne, wie ich die Änderung des Buttons abfrage während des Updates.... Ich weiß nicht, ob ich das so richtig erklärt bekomme, was ich möchte, jedenfalls aus der Registry bekomme ich dann zu wenig - für meine Zwecke - wesentliche Info, sorry. Kannst Du mir nicht bitte noch einen Tipp für die Button-Abfrage geben? Ich sehe bestimmt bloss den Wald vor lauter Bäumen nicht *gg*... Danke erneut.
    GLG
    Willy.

    PS:: Die Updates laufen trotzdem per Einstellung in Avira, wenn der User online geht, automatisch. Ist aber unabhängig von dem, was ich dann zusätzlich starte.

  • Hallo WillyWu,

    Zitat von Hilfe zu RegRead

    Es ist möglich, Registries im Netzwerk zu bearbeiten. Dazu ist "\\Computername\Schlüsselname" zu verwenden. Um diese Funktion verwenden zu können, ist es unter Windows NT/2000/XP/2003 notwendig, die entsprechenden Zugriffsrechte zu besitzen.

    da ich selbst keine Maus -Schubs und -Klick Skripte schreibe kann ich dich nur auf die Hilfe verweisen und auf diesen Thread [ gelöst ] text an minimiertes fenster
    Wenn du es nicht über die Registry lösen willst, würde ich an deiner Stelle aber über die Ereignisanzeige
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    bzw. Berichtanzeige
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    von Avira lösen, da hier die Zeit keibnerlei Rolle spielt,

    mfg autoBert

  • Hallo WillyWu,

    hier der ultimative Lösngsvorschlag: Avira legt zu jedem Vorgang eine Reportdatei an, da diese wie eine INI-Datei angelegt ist kannst du diese mit

    [autoit]

    $sReportDir = StringReplace(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Avira\AntiVir Desktop","AppDataDirectory"),"\\","\") & "Reports\"
    $aInfo = IniReadSection($sReportDir & "d06ecd00.avl","Update") ;Dateinamen anpassen
    _ArrayDisplay($aInfo)

    [/autoit]

    Falls du StartTime und EndTime auswerten willst musst du

    [autoit]

    _DateAdd

    [/autoit]

    verwenden, schau dir dazu das Beispiel in der Hilfe an. Die Zeit weicht um 2 Stunden ab, ob die Abweichung sich beim Zurückstellen der Sommerzeit auf Normalzeit auf 1 Stunde reduziert weiss ich nicht, gehe aber stark davon aus,

    PS.: bin am überlegen dafür ein kleines Admin-Tool zu schreiben und es am Markt als ShareWare (mit nervenden MsgBoxen ;) bis zur Registration anzubieten). Wäre nett wenn du bestätigen könntest, dass die ReportDir auch in deiner Version richtig erkannt wird bzw. falls Unterschied den entsprechenden Schlüssel zu posten,

    mfg (Auto)Bert

  • Hallo WillyWu,

    man kann den Update-Status von Avira auch über die WMI-Schnittstelle abfragen. Diese muss in der Konfiguration im Expertenmodus unter Allgemeines/WMI aktiviert werden (s. Anhang)

    Ich habe mal mit dem AutoIt Scriptomatic Tool den entsprechenden Code generiert und wie folgt angepasst:

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

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

    #include<array.au3>

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    Dim $arUpdate[1][7] = [["Download_Volume:", "Identifier:", "Number_of_Files_updated:", "Update_Aborted:", "Update_Date:", "Update_Duration:", "Update_Successful:"]]
    $i = 0

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

    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2\Applications\Avira_AntiVir")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Updater", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) Then
    For $objItem In $colItems
    $i += 1
    ReDim $arUpdate[$i + 1][7]
    $arUpdate[$i][0] = $objItem.Download_Volume
    $arUpdate[$i][1] = $objItem.Identifier
    $arUpdate[$i][2] = $objItem.Number_of_Files_updated
    $arUpdate[$i][3] = $objItem.Update_Aborted
    $arUpdate[$i][4] = $objItem.Update_Date
    $arUpdate[$i][5] = $objItem.Update_Duration
    $arUpdate[$i][6] = $objItem.Update_Successful
    Next
    Else
    MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Updater")
    EndIf

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

    _ArraySort($arUpdate, 1, 1, 0, 4)
    _ArrayDisplay($arUpdate)

    [/autoit]

    In der ausgegebennen Tabelle müssten eigentlicht alle Infos steh'n, die Du brauchst.

    Gruß
    Moctezuma III.

  • Hallo, AutoBert, hallo Montezuma,

    mal wieder Danke für Eure rasche Hilfe. Allerdings bin ich wahrscheinlich zu..., jedenfalls habe ich bei beiden Versionen Probleme.

    Bei Autoberts Version kommt eine MSGBOX mit der einer 1 darin als Text...
    Habe aktuelles angepasst, vllt. ist das Problem der Pfad?

    $sReportDir = StringReplace(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Avira\AntiVir Desktop","AppDataDirectory"),"\\","\") & "Reports\"
    ;M:\Documents and Settings\All Users\Application Data\Avira\AntiVir Desktop\
    ;d70e3a66.avl
    ;$aInfo = IniReadSection($sReportDir & "70e3a66.avl","Update") ;Dateinamen anpassen

    $aInfo = IniReadSection($sReportDir & "d06ecd00.avl","Update") ;Dateinamen anpassen
    MsgBox(1,"INFO",$aInfo)
    ;_ArrayDisplay($aInfo)

    (Ach so, bei _arrayDisplay kam immer eine Fehlermeldung, deswegen habe ich per MsgBox probiert.)


    Was mache ich falsch und - sorry - bei dem 2. Teil von Dir weiter unten habe ich gar nichts verstanden, was Du möchstest. Wenn ich es kann und es Dir hilft, mache ich es gerne, aber was bitte?

    Und Montezuma, bei Dir kommt folgende Fehlermeldung:

    Running:(3.3.6.1):M:\Program Files\AutoIt3\autoit3.exe "M:\Documents and Settings\Administrator\Desktop\AutoIt\avira_Report2.au3"
    M:\Documents and Settings\Administrator\Desktop\AutoIt\avira_Report2.au3 (13) : ==> Variable must be of type "Object".:
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Updater", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $colItems = $objWMIService^ ERROR
    ->19:21:37 AutoIT3.exe ended.rc:1
    >Exit code: 1 Time: 4.282


    Sorry und Hilfe... Danke im Voraus & bitte nicht bös sein, wenn ich aus Zeitmangel spät reagiere.
    LG
    Willy.


    PS: WMI in Avira hatte ich überall aktiviert.

  • Hallo WillyWu,

    läuft diese Skript (GUI nicht beachten):

    Spoiler anzeigen
    [autoit]

    #include <StaticConstants.au3>
    #include <date.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include<WindowsConstants.au3>
    #include<File.au3>
    #include<Array.au3>

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

    Opt('GUIOnEventMode', 1)
    ;Opt('MouseCoordMode', 2)
    Global $dtLU, $sAVCenter, $sReportDir, $sTitel ="Avira AntiVir Personal - Free Antivirus"
    Global $iCor = 7200 ;Korekturfaktorzeit in Seknden 2Stunden da Sommerzeit
    Global $sTitel = 'Beispiel zur Nutzung der _Contol-Befehle anhand Avira'

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

    Local $hMainGui = GUICreate($sTitel, 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $hMainGui gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    ;Verknüpft dem Event $Gui_Event_Close mit der Funktion _End

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

    ;Menübar anzeigen
    Global $menu_help = GUICtrlCreateMenu("?", -1, 1)
    Global $item_help_auto = GUICtrlCreateMenuItem("Autor: (Auto)Bert", $menu_help)
    Global $item_help_exit = GUICtrlCreateMenuItem("Beenden", $menu_help)
    GUICtrlSetOnEvent(-1, '_End')

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

    Local $hedtFrom = GUICtrlCreateLabel("Letztes Update", 20, 10, 170, 40)
    ;erzeugt ein From Steuerelement die zurückgegebene ID wird in der Variablen $hedtFrom gespeichert
    ;GUICtrlSetState(-1,$GUI_DISABLE)
    GUICtrlSetFont(-1, 12)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    ;verankert das From Steuerelement Links, rechts, oben und fixiert die Höhe
    ;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite

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

    GUICtrlCreateButton('&prüfen', 220, 10, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Prüfen" rechts und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    ;GUICtrlSetOnEvent(-1, '_CheckReg')
    ;Beim Klicken des Buttons wird die Funktion _CheckReg aufgerufen
    GUICtrlCreateButton('&nähere Infos', 220, 40, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    ;verankert den Button "Prüfen" rechts und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    ;GUICtrlSetOnEvent(-1, '_CheckAvira')
    ;Beim Klicken des Buttons wird die Funktion _CheckReg aufgerufen

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

    GUICtrlCreateButton('Be&enden', 220, 115, 150, 25)
    GUICtrlSetOnEvent(-1, '_END')
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)

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

    GUICtrlCreateGraphic(0, 210, 400, 2, $SS_BLACKRECT)
    GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT + $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM)
    Global $hStatus = GUICtrlCreateLabel("Statuus", 5, 215, 400, 25)

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

    GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT + $GUI_DOCKRIGHT + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM)
    ;verankert das Label Links, rechts und unten; fixiert die Höhe
    ;beim Resizen bleibt es dadurch auf seiner Position und ändert nur die Breite wird angepasst
    GUISetState()
    _CheckReg()
    _CheckAvira()
    While 1
    Sleep(120)
    WEnd

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

    Func _End()
    GUIDelete($hMainGui)
    Exit
    EndFunc ;==>_End

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

    Func _CheckReg()
    $dtLU = _DateAdd("s",RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Avira\AntiVir Desktop","LastUpdate")+$iCor,"1970/01/01 00:00:00")
    $sAVCenter = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Avira\AntiVir Desktop","Path")
    $sReportDir = StringReplace(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Avira\AntiVir Desktop","AppDataDirectory"),"\\","\") & "Reports"
    ConsoleWrite($dtLU & @CRLF)
    ConsoleWrite($sAVCenter & @CRLF)
    GUICtrlSetData($hedtFrom, "Letztes Update" &@CRLF & $dtLU)
    EndFunc ;==>_CheckDate

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

    Func _CheckAvira()
    $aFiles = _FileListToArray($sReportDir)
    dim $aReports[$aFiles[0]+1][5]
    ;_ArrayDisplay($aFiles)
    for $i = 1 to $aFiles[0]
    $sFileName = $sReportDir & "\" & $aFiles[$i]
    $dtFile = FileGetTime($sFileName,1,1)
    LOCAL $dtFileTime = _FormatedTime($dtFile)
    ;if $aFiles[$i] = "202b1e09.avl" Then consoleWrite("Treffer ")
    ;ConsoleWrite($sFileName & " " & $dtFile & " " & $dtFileTime & " " & StringLeft($dtLU,16) & @CRLF)
    $aReports[$i][0] = $aFiles[$i]
    if IniRead($sFileName,"REPORT","ReportType","") = 1 Then
    $aInfo = IniReadSection($sFileName,"UPDATE")
    if IsArray($aInfo) Then
    $aReports[$i][1] = "Update"
    $aReports[$i][2] = $aInfo[7][1]
    $aReports[$i][3] = $aInfo[10][1]
    $aReports[$i][4] = $aInfo[11][1]
    ;_ArrayDisplay($aInfo)
    EndIf
    Else
    $aReports[$i][1] = "SCAN"
    $aReports[$i][3] = IniRead($sFileName,"REPORT","Result","")
    EndIf
    Next
    $aReports[0][0]="Dateiname"
    $aReports[0][2]="UnixTime"
    $aReports[0][3]="erfolgreich (1=Ja)"
    $aReports[0][4]="upgedatete Dateien"

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

    _ArrayDisplay($aReports)
    EndFunc

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

    Func _FormatedTime($dt)
    Local $ret = StringLeft($dt,4) & "/" & STRINGMID($dt,5,2) & "/" & StringMid($dt,7,2) & " " & StringMid($dt,9,2) & ":" & StringMid($dt,11,2) & ":" & StringMid($dt,13,2)
    Return $ret
    EndFunc

    [/autoit]

    bei dir durch und erscheint am Ende ein Array-Listviewdisplay ähnlich wie dieses?
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    mfg autoBert


  • bei dir durch und erscheint am Ende ein Array-Listviewdisplay ähnlich wie dieses?

    autoBert
    also bei mir ja :)

    @WilliyWu
    "Object" bezieht sich auf die Variable $objWMIService, also kann auf den Pfad
    "winmgmts:\\" & $strComputer & "\root\CIMV2\Applications\Avira_AntiVir"
    nicht zugegriffen werden und es wird keine Objektvariable erzeugt. Prüfe Mal folgende Punkte:

    1. Läuft auf den jeweiligen Computern der Dienst "Winmgmt" aka. "Windows-Verwaltungsinstrumentation"?
    2. Gibt es in WMI-Steuerung den Zweig "\root\CIMV2\Applications\Avira_AntiVir"?
    3. Bei Zugriff auf RemoteSystem:
    - Computername in $strComputer ohne "\\"
    - evtl. DNS-Problem, IP-Adresse statt Computernamen nehmen
    - Blockiert die Firewall WMI-Anfragen
    - Keine Berechtigung auf RemoteSystem

    Hier mal ein angepasstes Script mit Error-Handler und der Möglichkeit, sich am System zu authentifiziern.

    Spoiler anzeigen
    [autoit]


    ; Generated by AutoIt Scriptomatic

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

    #include<array.au3>

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

    $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; Install a custom error handler

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

    $bAuth = 0 ; 0 ohne Authentifizierung / ungleich 0 mit Authentifizierung
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

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

    $strComputer = "remotecomputer"
    $strNamespace = "\root\CIMV2\Applications\Avira_AntiVir"
    $strUser = "Administrator"
    $strPw = "geheim"

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

    $colItems = ""
    Dim $arUpdate[1][7] = [["Download_Volume:", "Identifier:", "Number_of_Files_updated:", "Update_Aborted:", "Update_Date:", "Update_Duration:", "Update_Successful:"]]
    $i = 0

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

    If $bAuth Then
    $objLocater = ObjCreate("Wbemscripting.SWbemlocator")
    $objWMIService = $objLocater.ConnectServer($strComputer, $strNamespace, $strUser, $strPw)
    Else
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2\Applications\Avira_AntiVir")
    EndIf
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Updater", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) Then
    For $objItem In $colItems
    $i += 1
    ReDim $arUpdate[$i + 1][7]
    $arUpdate[$i][0] = $objItem.Download_Volume
    $arUpdate[$i][1] = $objItem.Identifier
    $arUpdate[$i][2] = $objItem.Number_of_Files_updated
    $arUpdate[$i][3] = $objItem.Update_Aborted
    $arUpdate[$i][4] = $objItem.Update_Date
    $arUpdate[$i][5] = $objItem.Update_Duration
    $arUpdate[$i][6] = $objItem.Update_Successful
    Next
    Else
    MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Updater")
    EndIf

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

    _ArraySort($arUpdate, 1, 1, 0, 4)
    _ArrayDisplay($arUpdate)

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

    Exit

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

    ; This is my custom error handler
    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    MsgBox(0, "", "We intercepted a COM Error !" & @CRLF & _
    "Number is: " & $HexNumber & @CRLF & _
    "Windescription is: " & $oMyError.windescription)

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

    Return SetError(1, 0, 0) ; something to check for when this function returns
    EndFunc ;==>MyErrFunc

    [/autoit]


    Gruß

    Moctezuma III.

  • Hallo, Ihr lieben Auto-Itler,

    danke mal wieder für Eure Hilfe und sorry für längere Pause (wird nicht die letzte sein, fürchte ich.

    Zu dem eigentlichen: autoBert: Ja, Script läuft problemlos komplett durch und es erscheint am Ende ein Array-Listviewdisplay, ähnlich wie das Bild. :P

    @Montezuma:

    1. Nein, so ein Dienst läuft nicht, wenn ich unter Verwaltung -> Dienste schaue, gibt es da 2mal eine "Windows Management Instrumentation", ist aber deaktiviert. Welche müsste ich da anschalten?

    2. Kann ich gar nicht beantworten, weil ich nicht weiß, wo ich da nachschauen muss. Ist das über Regedit?

    3. Und zu 3. kann ich nur sagen, das die Firewall nix davon blockiert, verstehe aber trotzdem nur den winzigsten Teil davon. Wenn ich es richtig kapiere, ist doch Remote ein entfernter PC, meinetwegen im Netzwerk oder per Web? Wozu ist das notwendig, wenn ich das nur auf jeweils einem PC wissen will? Die weder in einem Netzwerk sind und nur zum Update online? Habe ich da irgendwas komplett falsch verstanden? Sorry.... ;(

    Und zu Deinem Script, das startet und dann kommt die Fehlermeldung:
    "We interceppted a COM-Error! Number is: 800706BA Windescription is: Der RPC-Server ist nicht verfügbar..." (wozu brauch man den, funktioniert doch alles?)

    Und am Ende kommt die Fehlermeldung:

    M:\Documents and Settings\Administrator\Desktop\AutoIt\avira_Report4.au3 (26) : ==> Missing right bracket ')' in expression.:
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Updater", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $colItems = ^ ERROR

    ?(

    So, das also das aktuelle vom DAU 1 *gg*. Bitte um Info und Hilfe, aber bitte nicht böse sein, wenn meine Reaktion manchmal dauert.

    GLG
    Willy.

    PS.:Eine einfache Abfrage, ob sich während eines LAdevorganges ein Knopf geändert hat, macht mach die am besten mit Do Loop oder eher mit While wend

    a la:

    Starte Update
    While
    Knopf <> Beenden
    Wend
    msg irgendwas

  • Hallo, Ihr Lieben,

    nochmals danke für Eure schnellen Antworten. Bin aber heute allein auf eine einfache Version gestoßen, die zwar wahrscheinlich nicht perfekt ist, aber für meine Zwecke ausreichend ist. Stil und Hinweise sind noch einem Anfänger entsprechend, also bitte nicht erschrecken:

    Spoiler anzeigen

    ;Avira Update
    $AvUpd="update.exe"
    $AvUpdP='DM = "0" / NOMESSAGEBOX / ReceiveTimeout = 120'
    $AvUpdPf="M:\Program Files\Avira\AntiVir Desktop\"
    ;ShellExecuteWait ("update.exe",'DM = "0" / NOMESSAGEBOX / ReceiveTimeout = 120',"M:\Program Files\Avira\AntiVir Desktop\") ;funktioniert


    ShellExecute($AvUpd,$AvUpdP,$AvUpdPf)
    WinWait("Updater")
    WinWaitActive("Updater")


    $Knopf1=ControlGetText ( "Updater", "", "Button1")

    Do
    ;Sleep(250)
    Until ControlGetText ("Updater", "", "Button1")="Beenden [10]" ; geht
    ;Until $Knopf1="Beenden [10]" ; geht nicht, wird Endlos-Schleife

    ;$Knopf1=ControlGetText ( "Updater", "", "Button1")


    $Knopf2=ControlGetText ( "Updater", "", "Static21")
    $text1 = WinGetText("Updater", "");funktioniert


    MsgBox(0, "Der gelesene Text lautet:", $text1)
    MsgBox(0,"AVIRAUpdate",$Knopf2)

    Ich muss zwar noch einiges anpassen, aber meine Frage ist damit schon mal geklärt. Dafür hat sich eine neue Frage aufgetan: Wie ändere ich den Status von offen in gelöst?

    Mal wieder Danke im Voraus und GLG an die ganze AutoIt-Gemeinde, sowie ein schönes WE.

    Willy.