chmu-xp
Goto Top

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:
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
Hat jemand eine Idee wo mein Fehler liegt?


Danke,

Christian

Content-ID: 76633

Url: https://administrator.de/contentid/76633

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

filippg
filippg 25.12.2007 um 20:10:58 Uhr
Goto Top
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
chmu-xp
chmu-xp 25.12.2007 um 22:14:15 Uhr
Goto Top
Hallo,

vielen Dank für die Antwort.

Du hast recht - das Ganze läßt sich bestimmt sauberer und kürzer mit Variablen gestalten. Da dieses meine erste Batch ist mit ich allerdings mit den Variablen noch nicht ganz fit - aber ich arbeite daran face-smile

Muss ich den Errorlevel also mit %errorlevel% abfragen? Und muss dieser unbedingt "verglichen" werden?


Danke für die Hilfe

Christian
Biber
Biber 25.12.2007 um 22:23:42 Uhr
Goto Top
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:
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.

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
chmu-xp
chmu-xp 26.12.2007 um 19:54:49 Uhr
Goto Top
Hallo Biber,

vielen Dank für Deine Antwort.

Dein org. MS-Zitat macht in der Tat die Auswertung des Errorlevel etwas "unnötig" (wobei das noch nett ausgedrückt ist face-wink

Da mich der Ehrgeiz gepackt hat werde ich mich mal bez. dem Auswerten der Log hier im Forum schlau lesen...ist wie gesagt mein erster Versuch mit Batches rumzubasteln (allerdings extrem faszinierend / durch MS bin ich ein bisschen zum Konsumenten geworden und suche nur nach fertigen Lösungen in Form von Software / Shareware / Freeware - dabei ist es absolut effizient, sich realisierbare Lösungen selber zu basteln...wie früher zu C64-Zeiten face-wink.


Noch einen schönen Restweihnachtstag,

Christian