Probleme beim Script für ein Lexware Backup

  • Hallo zusammen,

    dies ist mein erster Post bei euch, ich hoffe das dieser korrekt Eingeordnet ist.
    Eines Vorweg, ich bin kein Coder und verwende Autoit um mir kleinere Aufgaben zu vereinfachen.
    Allerdings haut es bei diesem Script nicht wirklich hin, die Befehle werden scheinbar nicht verarbeitet und dann beendet sich das Script wieder.
    Zum Problem, ich möchte das Script zu einer festen Uhrzeit laufen lassen, dabei soll ein Laufwerksmapping vollzogen werden, zwei Dienste gestoppt werden und ein Verzeichnis *komprimiert* von A nach B kopiert werden.

    Vielleicht könnt Ihr mir dabei noch auf die Sprünge helfen.

    6 Mal editiert, zuletzt von WebBuddha (1. Oktober 2015 um 07:53)

  • Ja, ich bekomme nun eine Rückmeldung

    Code
    Line 103 (File "C:\CopyJob.exe"):
    
    
    Error: Variable used without being declared.

    Ich nutze ja nur die Variable $lexdst, aber dort kann ich keinen Fehler sehen.

    • Offizieller Beitrag

    Local $lexdst = ("I:\XXX\_BACKUP\_LEXWARE")

    Das ist quatsch. Weise der Variablen nur den Pfad zu: Local $lexdst = "I:\XXX\_BACKUP\_LEXWARE"
    Wobei Klammern, die zuviel sind, eigentlich ignoriert werden.

    EDIT:
    Der Fehler liegt woanders: Du erstellst die Variable zu einem Zeitpunkt, wo es Laufwerk I: noch gar nicht gibt! Also einfach erst DriveMappAdd, danach die Variable definieren.

  • Der gemeldete Fehler liegt an der verwendeten Konstanten: $DMA_DEFAULT. Das sie fehlt habe ich mit fogender Zeile herausgefunden:

    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

    Nach dem automatischen Hinzufügen (Tools|Compile ->>> Add required Constabtants *.au3) der benötigten Konstanten habe ich diese zusätzliche Zeile im Skript:

    #include <AutoItConstants.au3>

  • Danke für eure Antworten. Habe nun beide Änderungen durchgeführt und bekomme auch keine Fehlermeldung mehr zurück und das Script läuft.
    Die Dienste werden gestoppt und wieder gestartet.
    Das zwischenzeitliche komprimieren startet aber noch nicht.
    Oder habt Ihr evtl. noch Ideen?

    Der 7-zip Befehl passt soweit, dieser läuft manuell in der cmd sauber durch.

    Danke für eure Hilfe.

    10 Mal editiert, zuletzt von WebBuddha (29. September 2015 um 09:02)

    • Offizieller Beitrag

    Der 7-zip Befehl passt soweit, dieser läuft manuell in der cmd sauber durch.

    Läuft der Befehl denn auch, wenn du ihn mal allein von einem Skript mit RunWait startest? Evtl. auch mal mit opt_flag $RUN_CREATE_NEW_CONSOLE probieren.

    Edit:
    Vielleicht ist es auch günstiger nur einmal eine Konsole zu öffnen und dann alle Befehle in diese Konsole abzusetzten (StdinWrite StdoutRead)

    • Offizieller Beitrag

    "I:\XXX\_BACKUP\_LEXWARE\%DATE%_Backup.zip"

    AutoIt kann standardmäßig mit so einem Pfad gar nichts anfangen.
    Zunächst mal muss Opt('ExpandEnvStrings', 1) gesetzt sein, damit AutoIt Environment Variablen überhaupt innerhalb eines String umwandelt, und zum anderen muss %DATE% eine entsprechend gültige Environment Variable sein.

  • Sorry für die späte Antwort, aber ab 09:00 Uhr ist die DB in Verwendung und ich kann die Dienste nicht mehr stoppen.

    @BugFixIch habe nun den 7-Tip Befehl alleine über Auto-it starten wollen, aber die exe bricht nach Millisekunden wieder ab.
    Hast du evtl. ein Beispiel zu StdinWrite STdoutRead für mich?

    @Oscar kann ich die Opt('ExpandEnvStrings', 1) an beliebiger Stelle setzen?
    Das mit %DATE% habe ich zwischenzeitlich bereits gemerkt und entfernt, das muß ich mir später (wenn das Script läuft) nochmal ansehen.

    • Offizieller Beitrag

    kann ich die Opt('ExpandEnvStrings', 1) an beliebiger Stelle setzen?

    Theoretisch an beliebiger Stelle im Code, aber auf jeden Fall vor dem Benutzen der Environment-Variablen.
    Guter Stil ist es allerdings, alle Optionen (Opt) am Anfang des Scripts zu platzieren. Bei meinen Scripten mache ich das so, dass die Optionen gleich nach den Includes stehen.

  • Danke.
    So langsam kommt auch Licht am Ende des Tunnels ;)
    Habe den 7-Zip job nun nicht direkt gestartet, sondern rufe Ihn mittels console auf. Das Startet nun und läuft durch.
    Beim Zip-File möchte ich jetzt noch das aktuelle Datum anfügen und dann sollte es erstmal passen.
    Im cmd wird auch kein UNC-Pfad akzeptiert, das muß ich mir auch noch genauer ansehen.

    Falls Ihr also noch Tips habt, immer gern ;)

    Danke nochmals für die Hilfe.

    PS: Der Code oben wurde wieder angepasst.

  • Mit Opt('ExpandVarStrings', 1) kannst Du auch die Datums-Makros von AutoIt in den String packen:

    AutoIt
    Opt('ExpandVarStrings', 1)
    
    
    ConsoleWrite('"\\FQDN\@YEAR@_@MON@_@MDAY@_Backup.zip"' & @CR)

    Danke für den Hinweis, aber das bekomme ich nicht in meinem RunWait Befehl unter...

    Code
    RunWait(@ComSpec & " /k " & 'C:\Programme\7-Zip\7z.exe a -tzip "\\FQDN\@YEAR@_@MON@_@MDAY@_Backup.zip" C:\ProgramData\Lexware\professional\Datenbank', "",@SW_SHOW)

    Das haut, wie ich es mir als nicht Coder vorstelle, nicht wirklich hin ;)