Schreiben in ein File funktioniert nicht, wenn die exe von tasksscheduler ausgeführt wird.

  • hi all,

    ich habe dein ein für mich seltsames verhalten bei einem meiner scripte.

    ich sichere täglich die registry eines rechners, schreibe diese in ein verzeichnis das den aktuellen wochentag als name bekommt.
    ausnahme ist der jeweilige Donnerstag der in ein verzeichnis mit dem aktuellen datum bekommt (und archiviert wird). d.h. ich habe eine revolvierende sicherung mit einer jeweiligen Wochensicherung. ---- das funzt auch.

    den programmpfad, den sicherungspfad und die parameter übergebe ich mittels einer ini datei. ---- das funzt auch

    ein kurzes protokoll (erfolg oder fehlerfall) schreibe ich auch in diese ini datei zurück ---- das funzt auch wenn ich das compilierte script (exe) per doppelklick ausführe.

    :?: und jetzt zu dem problem: :?:
    wird das compilierte script aber über den win7 taskscheduler ausgeführt klappt das schreiben der protokoll einträge nicht.

    kann mir jemand vielleicht sagen, woran das liegt (btw. die ntfs rechte auf das verzeichnis und die datei (ini) sind full control everyone)


    liebe gruesse
    ugt100


    Spoiler anzeigen


    #include <Date.au3>
    #include <file.au3>

    Dim $cde_param, $cde_prgpath, $cde_sikpath, $cde_tagname, $cde_weekday, $cde_LastRun, $cde_Drive, $cde_filedate

    FileInstall("RegLocalSikSettings.ini", "RegLocalSikSettings.ini") ;INI-Datei editierbar

    If FileExists(".\RegLocalSikSettings.ini") Then ;If INI-Datei vorhanden, sonst Cancel
    $cde_prgpath = IniRead("RegLocalSikSettings.ini", "Settings", "cde_prgpath", "NichtGefunden") ;Auslesen INI-Datei
    $cde_sikpath = IniRead("RegLocalSikSettings.ini", "Settings", "cde_sikpath", "NichtGefunden")
    $cde_param = IniRead("RegLocalSikSettings.ini", "Settings", "cde_param", "NichtGefunden")
    $cde_Drive = StringMid($cde_sikpath, 2, 3)

    $cde_LastRun = " " & @MDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN ;Last Run Datum
    IniWrite("RegLocalSikSettings.ini", "History", "cde_LastRun", $cde_LastRun) ;in INI-Datei schreiben


    If FileExists($cde_prgpath) Then ;If Programm gefunden, sonst Cancel
    If DriveStatus($cde_Drive) = "READY" Then ;If Ziel vorhanden, sonst Cancel
    MsgBox(64,"Registry sichern", "Start der Sicherung - einen Augenblick bitte ...",2)

    $cde_weekday = _DateToDayOfWeekISO(@YEAR, @MON, @MDAY) ;Berechnung Wochentag
    If $cde_weekday = "1" Then ;tägl. Sicherung pro Wochentag
    $cde_tagname = "Montag" ;Zyklus = 1 Woche
    ElseIf $cde_weekday = "2" Then ;danach jeweiliges Überschreiben
    $cde_tagname = "Dienstag"
    ElseIf $cde_weekday = "3" Then
    $cde_tagname = "Mittwoch"
    ElseIf $cde_weekday = "4" Then
    $cde_tagname = "#date#" ;Ausnahme 1 wöchentl. Sik
    ;~ $cde_tagname = "Donnerstag" ;mit Tagesdatum
    ElseIf $cde_weekday = "5" Then
    ;~ $cde_tagname = "#date#"
    $cde_tagname = "Freitag"
    ElseIf $cde_weekday = "6" Then
    $cde_tagname = "Samstag"
    ElseIf $cde_weekday = "7" Then
    $cde_tagname = "Sonntag"
    EndIf

    $cde_sikpath1 = $cde_sikpath & $cde_tagname &'" ' ;Erzeugen Verzeichnis für SIK entweder

    If $cde_tagname = "#date#" Then ;Verz. 'wöchentliche SIK' (Datumsangabe)
    $cde_filedate = StringMid($cde_sikpath & "\" & StringRight(@YEAR,2) & "-" & @MON & "-" & @MDAY & "\" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt", 2, 100)
    Else ;oder Verz. 'tägl. SIK' (Wochentagsangabe)
    $cde_filedate = StringMid($cde_sikpath & $cde_tagname & "\" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt", 2, 100)
    EndIf

    ShellExecuteWait($cde_prgpath, $cde_sikpath1 & $cde_param) ;Aufruf ERUNT
    Sleep(1000)
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Status", " OK") ;Status in INI-Datei schreiben (OK)
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Error", "")

    FileOpen($cde_filedate, 10) ;LogFile erzeugen im SIK-Verz.
    FileWriteLine($cde_filedate, "Registry Sicherung vom: " & @MDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC)
    FileClose($cde_filedate) ;Datum und Uhrzeit ins LogFile schreiben
    Else
    MsgBox(16,"LW nicht gefunden", ' Das Ziel-LW ( ' & StringUpper($cde_Drive) & ' ) wurde nicht gefunden.' & @CRLF & @CRLF & " Der Vorgang wird abgebrochen - es erfolgt keine Sicherung !")
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Status", " Abbruch") ;Fehlerfall 'Ziel-LW' nicht gefunden
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Error", " Ziel-LW nicht gefunden")
    EndIf
    Else
    MsgBox(16,"Programm nicht gefunden", ' Das Registry-Backup Programm (ERUNT) wurde nicht gefunden.' & @CRLF & @CRLF & " Der Vorgang wird abgebrochen - es erfolgt keine Sicherung !")
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Status", " Abbruch") ;Fehlerfall 'Bkp-Prg' nicht gefunden
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Error", " ERUNT nicht gefunden")
    EndIf
    Else
    MsgBox(16,"Datei nicht gefunden", ' Die Datei "RegLocalSikSettings.txt" wurde nicht gefunden.' & @CRLF & @CRLF & "Das Programm wird abgebrochen - es erfolgt keine Sicherung !")
    EndIf ;Fehlerfall 'ZINI-Datei' nicht gefunden

  • Aufgeräumt & gesyntaxt :D

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <file.au3>

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

    Dim $cde_param, $cde_prgpath, $cde_sikpath, $cde_tagname, $cde_weekday, $cde_LastRun, $cde_Drive, $cde_filedate

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

    FileInstall("RegLocalSikSettings.ini", "RegLocalSikSettings.ini") ;INI-Datei editierbar

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

    If FileExists(".\RegLocalSikSettings.ini") Then ;If INI-Datei vorhanden, sonst Cancel
    $cde_prgpath = IniRead("RegLocalSikSettings.ini", "Settings", "cde_prgpath", "NichtGefunden") ;Auslesen INI-Datei
    $cde_sikpath = IniRead("RegLocalSikSettings.ini", "Settings", "cde_sikpath", "NichtGefunden")
    $cde_param = IniRead("RegLocalSikSettings.ini", "Settings", "cde_param", "NichtGefunden")
    $cde_Drive = StringMid($cde_sikpath, 2, 3)

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

    $cde_LastRun = " " & @MDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN ;Last Run Datum
    IniWrite("RegLocalSikSettings.ini", "History", "cde_LastRun", $cde_LastRun) ;in INI-Datei schreiben

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

    If FileExists($cde_prgpath) Then ;If Programm gefunden, sonst Cancel
    If DriveStatus($cde_Drive) = "READY" Then ;If Ziel vorhanden, sonst Cancel
    MsgBox(64, "Registry sichern", "Start der Sicherung - einen Augenblick bitte ...", 2)

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

    $cde_weekday = _DateToDayOfWeekISO(@YEAR, @MON, @MDAY) ;Berechnung Wochentag
    If $cde_weekday = "1" Then ;tägl. Sicherung pro Wochentag
    $cde_tagname = "Montag" ;Zyklus = 1 Woche
    ElseIf $cde_weekday = "2" Then ;danach jeweiliges Überschreiben
    $cde_tagname = "Dienstag"
    ElseIf $cde_weekday = "3" Then
    $cde_tagname = "Mittwoch"
    ElseIf $cde_weekday = "4" Then
    $cde_tagname = "#date#" ;Ausnahme 1 wöchentl. Sik
    ;~ $cde_tagname = "Donnerstag" ;mit Tagesdatum
    ElseIf $cde_weekday = "5" Then
    ;~ $cde_tagname = "#date#"
    $cde_tagname = "Freitag"
    ElseIf $cde_weekday = "6" Then
    $cde_tagname = "Samstag"
    ElseIf $cde_weekday = "7" Then
    $cde_tagname = "Sonntag"
    EndIf

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

    $cde_sikpath1 = $cde_sikpath & $cde_tagname & '" ' ;Erzeugen Verzeichnis für SIK entweder

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

    If $cde_tagname = "#date#" Then ;Verz. 'wöchentliche SIK' (Datumsangabe)
    $cde_filedate = StringMid($cde_sikpath & "\" & StringRight(@YEAR, 2) & "-" & @MON & "-" & @MDAY & "\" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt", 2, 100)
    Else ;oder Verz. 'tägl. SIK' (Wochentagsangabe)
    $cde_filedate = StringMid($cde_sikpath & $cde_tagname & "\" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt", 2, 100)
    EndIf

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

    ShellExecuteWait($cde_prgpath, $cde_sikpath1 & $cde_param) ;Aufruf ERUNT
    Sleep(1000)
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Status", " OK") ;Status in INI-Datei schreiben (OK)
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Error", "")

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

    FileOpen($cde_filedate, 10) ;LogFile erzeugen im SIK-Verz.
    FileWriteLine($cde_filedate, "Registry Sicherung vom: " & @MDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC)
    FileClose($cde_filedate) ;Datum und Uhrzeit ins LogFile schreiben
    Else
    MsgBox(16, "LW nicht gefunden", ' Das Ziel-LW ( ' & StringUpper($cde_Drive) & ' ) wurde nicht gefunden.' & @CRLF & @CRLF & " Der Vorgang wird abgebrochen - es erfolgt keine Sicherung !")
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Status", " Abbruch") ;Fehlerfall 'Ziel-LW' nicht gefunden
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Error", " Ziel-LW nicht gefunden")
    EndIf
    Else
    MsgBox(16, "Programm nicht gefunden", ' Das Registry-Backup Programm (ERUNT) wurde nicht gefunden.' & @CRLF & @CRLF & " Der Vorgang wird abgebrochen - es erfolgt keine Sicherung !")
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Status", " Abbruch") ;Fehlerfall 'Bkp-Prg' nicht gefunden
    IniWrite("RegLocalSikSettings.ini", "History", "cde_Error", " ERUNT nicht gefunden")
    EndIf
    Else
    MsgBox(16, "Datei nicht gefunden", ' Die Datei "RegLocalSikSettings.txt" wurde nicht gefunden.' & @CRLF & @CRLF & "Das Programm wird abgebrochen - es erfolgt keine Sicherung !")
    EndIf ;Fehlerfall 'ZINI-Datei' nicht gefunden

    [/autoit]
  • :?: und jetzt zu dem problem: :?:
    wird das compilierte script aber über den win7 taskscheduler ausgeführt klappt das schreiben der protokoll einträge nicht.

    wird mit einer Fehlermeldung abgebrochen (die Daten sind auch nicht gesichert)? Wenn nein vermute ich, dass deine Logdatei nicht dort erstellt wird wo du sie erwartest. Verwende absolute Pfade und es sollte auch bei einem Aufruf über den Schedler klappen,

    mfg (Auto)Bert

  • hi autobert,

    es kommt zu keinem fehler (in normalfall)- die sicherung funktioniert ohne probleme. nur das schreiben in die ini datei klappt nicht

    das mit den absoluten pfaden teste ich ...

    Gruss
    ugt100