Software aus Registry auslesen, in Textdatei schreiben und filtern

  • Servus liebe Leute,

    ich habe ein kleines Problem, bei dem ich gar nicht weiss, wie ich weitermachen soll.
    Ich schreibe für meine Firma gerade ein Backuptool. Das Tool sichert persönliche Ordner aus Outlook (mit der OutlookEx UDF), Eigene Dateien, Favoriten, Desktop, nk2-Datei usw. auf einen Sicherungsserver und setzt dort noch einige Berechtigungen mittels eines Serviceusers.

    Funktioniert auch alles schon ne Zeit lang ziemlich gut. Das Problem ist nun, dass eine Funktion gewünscht wurde um die Software auf dem jeweiligen PC des Users auszulesen und in eine Textdatei zu schreiben.

    Den Großteil habe ich schon. Software wird aus der Registry (Uninstall-Key) des Users ausgelesen und auf dem Sicherungsserver in eine txt gespeichert.
    Jetzt stehen hier aber auch noch 10000 Sicherheitsupdates usw. drin, die keinen Menschen interessieren :)

    Hier mal die Funktion:

    Spoiler anzeigen
    [autoit]


    ;Installierte Software auslesen
    Func _GetSoftware()

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

    $sBaseKey = "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\"

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

    $iKey = 1
    $sSoftwareName = ""
    $sLogfile = "\\SICHERUNGSSERVER\FREIGABENAME$\"&@UserName&"\software.txt"
    $hFile = FileOpen ( $sLogfile, 10 )
    if @error Then
    MsgBox ( 64, "Fehler", "Konnte Datei nicht öffnen.",Default,$Form1)
    Exit
    EndIf

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

    while 1
    $sKey = RegEnumKey ( $sBaseKey , $iKey )
    if @error then ExitLoop
    $sDisplayName = RegRead ( $sBaseKey & "\" & $sKey , "DisplayName")
    if @error Then
    $sDisplayName = RegRead ( $sBaseKey & "\" & $sKey , "QuietDisplayName")
    if @error then
    $iKey += 1
    ContinueLoop
    EndIf
    EndIf
    FileWriteLine ( $hFile, $sDisplayName & @crlf)
    $iKey += 1
    WEnd

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

    EndFunc

    [/autoit]

    Damit habe ich schonmal die Textdatei.

    Wie kann ich diese Datei jetzt filtern? Zum Beispiel alle Zeilen in der Textdatei löschen, die mit "Sicherheitsupdate blablabla" anfangen?
    Oder macht es Sinn lieber vorher das Array zu filtern, welches dann in die Textdatei geschrieben wird? Wenn ja, wie? :)

    Vielen Dank schonmal für die Hilfe!

    Grüße
    Patrick

    2 Mal editiert, zuletzt von zawn (24. September 2012 um 10:23)

  • Hier ein Script, was ich dir mal auf die schnelle geschrieben habe ^^ | Es sollte dir garantiert helfen :P

    >> Es ist sinvoller, wenn man das Array überprüft bevor man in die Textdatei schreibt.

    [autoit]


    Dim $Array[10] ;~ Nehmen wir mal an, dein Array hat 10 strings gespeichert.

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

    $Array[0] = 'String 1'
    $Array[1] = 'String 2'
    $Array[2] = 'Sicherheitsupdate 1'
    $Array[3] = 'String 3'
    $Array[4] = 'String 4'
    $Array[5] = 'String 5'
    $Array[6] = 'Sicherheitsupdate 2'
    $Array[7] = 'String 6'
    $Array[8] = 'Sicherheitsupdate 3'
    $Array[9] = 'String 7'

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

    $Open = FileOpen('Beispiel.txt', 2)

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

    ;~ Nun gehen wir mit einer For-Schleife das ganze Array durch und suchen uns die bestimmten Werte heraus.
    For $i = 0 To UBound($Array, 1) -1
    $bool = StringRegExp($Array[$i], 'Sicherheitsupdate', 0) ;~ Hier musst du nur das pattern anpassen.
    If $bool = 0 Then
    FileWrite($Open, $Array[$i] & @CRLF)
    EndIf
    Next

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

    FileClose($Open)

    [/autoit]