Probleme bei Auswertung des Errorlevel von NTBackup in Batch
Hallo,
nachdem ich bereits alle meine bescheidenen Batch-Kenntnisse aus diesem genialen Forum gezogen habe habe ich noch ein für mich unlösbares Problem:
Ich sichere meinen Fileserver mit NTBackup über ein Script. Beim Start des automatischen Backups (über Taskplaner) als auch am Ende erhalte ich eine eMail (letztere mit Log als Anhang). In meiner Batch soll eigentlich der Errorlevel von NTBackup ausgewertet werden - allerdings erhalte ich immer das Ergebnis "Sicherung erfolgreich" - und ich habe keine Ahnung was hier schief läuft.
Hier meine Batch:
Hat jemand eine Idee wo mein Fehler liegt?
Danke,
Christian
nachdem ich bereits alle meine bescheidenen Batch-Kenntnisse aus diesem genialen Forum gezogen habe habe ich noch ein für mich unlösbares Problem:
Ich sichere meinen Fileserver mit NTBackup über ein Script. Beim Start des automatischen Backups (über Taskplaner) als auch am Ende erhalte ich eine eMail (letztere mit Log als Anhang). In meiner Batch soll eigentlich der Errorlevel von NTBackup ausgewertet werden - allerdings erhalte ich immer das Ergebnis "Sicherung erfolgreich" - und ich habe keine Ahnung was hier schief läuft.
Hier meine Batch:
Blat -install SERVER. server@xyz.de
Blat -body "Sicherung Server gestartet" -to info@xyz.de -server smtp.strato.de -u server@xyz.de -pw XXXXX -debug -timestamp -log blatSMTPlog.txt -subject "Sicherung Server gestartet"
echo off
for /f "Tokens=1-4 Delims=/ " %%i in ('date /t') do set dt=%%i-%%j-%%k-%%l
for /f "Tokens=1" %%i in ('time /t') do set tm=-%%i
set tm=%tm::=-%
set dtt=%dt%%tm%
C:\WINDOWS\system32\ntbackup.exe backup "@C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data\Backup Daily REV.bks" /n "%computername%-%dtt%" /d "daily %dtt%" /v:yes /r:no /rs:no /hc:off /m copy /j "daily %dtt%" /l:s /f "E:\Backup Daily.bkf" /UM
IF ErrorLevel 4 goto err_lvl4
IF ErrorLevel 3 goto err_lvl3
IF ErrorLevel 2 goto err_lvl2
IF ErrorLevel 1 goto err_lvl1
IF ErrorLevel 0 goto success_lvl
:err_lvl4
set "Pfad=C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data"
for /f %%i in ('dir /b /od "%Pfad%\*.log"') do set "Letzte=%%i"
Blat -install SERVER. server@xyz.de
Blat -body "Sicherung Server fehlerhaft" -attach "%Pfad%\%Letzte%" -to info@xyz.de -server smtp.strato.de -u server@xyz.de -pw XXXXX -debug -timestamp -log blatSMTPlog.txt -subject "Sicherung Server fehlerhaft"
goto :eof
:err_lvl3
set "Pfad=C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data"
for /f %%i in ('dir /b /od "%Pfad%\*.log"') do set "Letzte=%%i"
Blat -install SERVER. server@xyz.de
Blat -body "Sicherung Server fehlerhaft (abgebrochen)" -attach "%Pfad%\%Letzte%" -to info@xyz.de -server smtp.strato.de -u server@xyz.de -pw XXXXX -debug -timestamp -log blatSMTPlog.txt -subject "Sicherung Server fehlerhaft (abgebrochen)"
goto :eof
:err_lvl2
set "Pfad=C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data"
for /f %%i in ('dir /b /od "%Pfad%\*.log"') do set "Letzte=%%i"
Blat -install SERVER. server@xyz.de
Blat -body "Sicherung Server fehlerhaft (Zugriffs - oder Dateikonflikt)" -attach "%Pfad%\%Letzte%" -to info@xyz.de -server smtp.strato.de -u server@xyz.de -pw XXXXX -debug -timestamp -log blatSMTPlog.txt -subject "Sicherung Server fehlerhaft (Zugriffs - oder Dateikonflikt)"
goto :eof
:err_lvl1
set "Pfad=C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data"
for /f %%i in ('dir /b /od "%Pfad%\*.log"') do set "Letzte=%%i"
Blat -install SERVER. server@xyz.de
Blat -body "Sicherung Server fehlerhaft (keine Daten zum sichern)" -attach "%Pfad%\%Letzte%" -to info@xyz.de -server smtp.strato.de -u server@xyz.de -pw XXXXX -debug -timestamp -log blatSMTPlog.txt -subject "Sicherung Server fehlerhaft (keine Daten zum sichern)"
goto :eof
:success_lvl
set "Pfad=C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\Windows NT\NTBackup\data"
for /f %%i in ('dir /b /od "%Pfad%\*.log"') do set "Letzte=%%i"
Blat -install SERVER. server@xyz.de
Blat -body "Sicherung Server erfolgreich" -attach "%Pfad%\%Letzte%" -to info@xyz.de -server smtp.strato.de -u server@xyz.de -pw XXXXX -debug -timestamp -log blatSMTPlog.txt -subject "Sicherung Server erfolgreich"
goto :eof
Danke,
Christian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 76633
Url: https://administrator.de/contentid/76633
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
ich würde mal etwas wie
if %errorlevel% eq 1 goto ...
probieren. So wie du das hast wird der Wert von Errorlevel nicht aufgelöst, und es findet auch kein Vergleich statt. Das einzige was mich wundert ist, warum bei dir success_lvl ausgeführt wird, eigentlich müsste er in :err_lvl4 reinlaufen und von dort zu :eof.
Ansonsten: du machst doch bei allen Erroleveln das gleiche, bis auf den Betreff. Dann lege doch eine Variable an, in der du den Betreff hinterlegst (so wie bisher, als mit if und Sprungmarken) und verwende dann für alle die gleichen Blat-Aufrufe (lediglich mit der Variablen für den Betreff). Das ist deutlich sauberer programmiert.
Schön ist es auch immer die Fälle abzudecken, in denen Errolevel nicht zwischen 0 und 4 liegt (auch wenn das angeblich nicht möglich sein kann).
Filipp
ich würde mal etwas wie
if %errorlevel% eq 1 goto ...
probieren. So wie du das hast wird der Wert von Errorlevel nicht aufgelöst, und es findet auch kein Vergleich statt. Das einzige was mich wundert ist, warum bei dir success_lvl ausgeführt wird, eigentlich müsste er in :err_lvl4 reinlaufen und von dort zu :eof.
Ansonsten: du machst doch bei allen Erroleveln das gleiche, bis auf den Betreff. Dann lege doch eine Variable an, in der du den Betreff hinterlegst (so wie bisher, als mit if und Sprungmarken) und verwende dann für alle die gleichen Blat-Aufrufe (lediglich mit der Variablen für den Betreff). Das ist deutlich sauberer programmiert.
Schön ist es auch immer die Fälle abzudecken, in denen Errolevel nicht zwischen 0 und 4 liegt (auch wenn das angeblich nicht möglich sein kann).
Filipp
Moin chmu-xp,
vom Gedankengang her ist Dein Sicherungsbatch schon sauber angelegt (vom möglichen Straffen wie von filippg beschrieben mal abgesehen).
Das Problem dürfte eher sein, dass sich NTBackup einfach nicht daran hält, Errorlevel ungleich 0 bei Misserfolg zurückzugeben.
Siehe bei M$KB 260327 Sicherung gibt Grütze zurück.
Weil mir M$-Zitate immer runtergehen wie Öl, hier eines original aus dem Artikel:
Abhilfe:
ABSOLUT darauf verzichten, den Errorlevel des NTBackup-Tools auszuwerten.
Werte das Logfile aus (neudeutsch: PTFL=parse the logfile).
Suche mit find/findstr nach "error", "invalid", "cancelled", "aborted" und gehe entsprechend der Fund/Nixfund-Situation zu Deinen Sprungmarken.
Liebe Grüße
ein weihnachtlich vollgefressener
Biber
vom Gedankengang her ist Dein Sicherungsbatch schon sauber angelegt (vom möglichen Straffen wie von filippg beschrieben mal abgesehen).
Das Problem dürfte eher sein, dass sich NTBackup einfach nicht daran hält, Errorlevel ungleich 0 bei Misserfolg zurückzugeben.
Siehe bei M$KB 260327 Sicherung gibt Grütze zurück.
Weil mir M$-Zitate immer runtergehen wie Öl, hier eines original aus dem Artikel:
Auch wenn ein Problem ist, kann einen Exit (0) Nullcode das Sicherungstool derzeit zurückgeben.
Wenn es nur einen schwerwiegenden Fehler wie einem Ausgang des Speicherfehlers ermittelt,
wird das Sicherungstool einen Fehlercode ungleich Null zurückgeben.
Ein fehlendes Gerät, fehlendes Medium oder auch ein Sicherungsfehler werden weiterhin einen Exit (0) Nullcode zurückgeben.
...das könnte nicht mal ich toppen.Wenn es nur einen schwerwiegenden Fehler wie einem Ausgang des Speicherfehlers ermittelt,
wird das Sicherungstool einen Fehlercode ungleich Null zurückgeben.
Ein fehlendes Gerät, fehlendes Medium oder auch ein Sicherungsfehler werden weiterhin einen Exit (0) Nullcode zurückgeben.
Abhilfe:
ABSOLUT darauf verzichten, den Errorlevel des NTBackup-Tools auszuwerten.
Werte das Logfile aus (neudeutsch: PTFL=parse the logfile).
Suche mit find/findstr nach "error", "invalid", "cancelled", "aborted" und gehe entsprechend der Fund/Nixfund-Situation zu Deinen Sprungmarken.
Liebe Grüße
ein weihnachtlich vollgefressener
Biber