Beiträge von water

    Ich sage mal so:
    Wenn sich eine Passwortverwaltungssoftware automatisieren lässt (also erlaubt, dass eine Sicherheitsfunktion umgangen wird) und dies dann auch noch von der IT genehmigt wird, dann würde ich

    • mich nach einer besseren (sprich sichereren Lösung umsehen) umsehen
    • mal ein ernstes Gespräch mit der IT führen.
      Wobei natürlich die Frage ist, ob die Aussage von einem IT-Techniker oder einem für IT-Sicherheit zuständigen Mitarbeiter der IT gekommen ist. Techniker geben schnell mal as frei :(
      Solche Themen habe ich in unserer Firma schon -zig Mal diskutiert. Es dauert, bis das Verständnis bei den Benutzern und IT-Mitarbeitern gegeben ist.
      Sicherheit <> Bequemlichkeit. Leider.

    _OL_ItemFind kennt keinen @error = 0. 0 bedeutet immer "erfolgreiche Ausführung".
    Lasst Dir mal nur die Properties "EntryID,Subject" zurückgeben. Falls das nichts nützt, dann nur "EntryID".

    Sollte das auch nichts nützen, dann ändere $iFlags von 1 auf 9. Damit werden nicht gefundene Properties als "N/A" zurückgegeben.


    $olAppointment ist eine UDF-interne Variable, definiert in OutlookEX_Base.au3

    Ist doch schon was.

    Jetzt musst Du nur noch rausfinden, welche Zeile das in Deinem Skript ist. Da Du nur eine Funktion gepostet hast, ist das von hier aus etwas schwer zu erkennen ;)

    Klingt aber, als ob Du einen falschen Index für den Array verwendest.

    Beispiel:
    Ein Array hat 4 Elemente, dann laufen die gültigen Indexwerte von 0 bis 3.
    Oft sieht Code wie folgt aus:

    Code
    For $i = 0 to UBound($aArray)
    
    ; müsste aber heißen:
    
    For $i = 0 to UBound($aArray) - 1

    Das erhöht die Durchlaufzeit aber nur um etwas mehr als 10 ms. D.h. wir sind bei 4500 Durchläufen immer noch bei gut eienr Stunde.

    Kann es sein, dass die Durchlaufzeiten erheblich schwanken? Vielleicht sollte man mal für 50 Durchläufe die jeweilgie Gesamtzeit messen.

    Kannst Du bitte das aktuelle Skript posten?

    Da _IENavigate und _IELoadWait jeweils unter 1 Sekunde dauerte, sollte man noch _IEGetObjById messen.
    Irgendwie müssen die 4-5 Stunden ja zusammenkommen. _IENavigate und _IELoadWait dauern mit einem gemittelten Gesamtwert von 850 ms weniger als 1 Stunde.


    In den Raum gefragt (quick & dirty)

    Du kannst natürlich ein Controlskript erstellen, das eine beliebige Anzahl an Arbeitsskripten (im Prinzip Dein bisheriges Skript) startet und jeweils als Parameter den Index für den Startlink sowie die Anzahl der Links übergibt.

    Die Ergebnisse schreibt jedes Arbeitsskript in eine eigene Datei.

    Der Start des Arbeitsskriptes bekommt jeweils die PID des Prozesses zurück. Dieser wird in enem Array gespeichert.

    Das Controlskript prüft die Arbeitsprozesse anhand der PID auf Existenz. Wenn alle beendet sind, dann kann das Controlscript die Ergebnisse zu einer Gesamtergebnisdatei zusammenkopieren (falls notwendig).

    So in etwa:

    • Die schreibenden Dateizugriffe habe ich auf Handle umgestellt
    • _IENavigate habe ich in zwei Befehle aufgespalten. _IENavigate und _IELoadWait. Beide werden für den ersten Durchlauf ausgewertet und das Ergebnis auf die Konsole ausgegeben.
    • Den Umbau von _FileCountLines überlasse ich Dir

    Je nach Laufzeit von _IENavigate und _IELoadWait sehen wir, wo wir den Sparstift ansetzen sollten.

    Um die Abfrage zu beschleunigen könntest Du die Datei compare.csv in einen Array einlesen und dann direkt auf die entsprechende Zelle zugreifen. Mit FileReadLine liest Du 4500 mal die Datei bis zur gewünschten Zeile durch.

    Das gilt auch für FileWriteLine. Wenn Du den Dateinamen angibst, dann wird die Datei jeweils geöffnet, der Datensatz geschrieben und die Datei wieder geschlossen.
    In einem Test mit 4500 Datensätzen dauert das 50848 ms gegenüber 4 ms.


    BTW: Wo wird $waitforload definiert?


    Setze mal einen Timer für _IENavigate. Vielleicht kann man daraus eine eigene Funktion erstellen und gewisse Fehlerprüfungen entfernen.

    In der Hilfe für "Func"

    Zitat

    Entire arrays can be passed to functions (and returned from them) by simply using the array name without any brackets. Arrays should be passed to user-defined functions using the ByRef keyword to avoid the overhead of copying all the data in the array. Note that AutoIt only copies an array parameter if the contents are changed, so it is only in this case that ByRef offers an advantage, although it is recommended that to use it in all cases.

    Ich glaube aber, mich erinnern zu können, dass dies nicht nur für Arrays gilt. War vor ewigen Zeiten mal eine Diskussion im engl. Forum.