Exchange 2003 Automatic Backup Script using NTBackup
Objective: Backup my Exchange Server mailbox/mailstore with Windows server built-in NTBACKUP.
My example allow NORMAL and DIFFERENTIAL backup to be run using same batch file.
Backup of Exchange is a must. Besides having all the backup data for recovery purpose, it cleans up the exchange transaction log which will use up all your harddisk space eventually.
NTBACKUP can be run in GUI or in command line mode. My example here makes use of the command line mode so that the backup can be scheduled and run automatically.
The reason for this project is I don't have budget for the Exchange mailbox option of my BackupExec. I use NTBACKUP to backup the exchange mailbox which allow me to backup the mailbox while the mailbox is in operation. The backup file is then backup to tape using standard backup method.
The below script is tested on Exchange 2003 server on Windows 2003 Standard.
All you need is to do the below:
REM The below session is remarked. The orginal purpose is to allow multiple Backup setting. I do not use the below function but retained here for my reference only.
My example allow NORMAL and DIFFERENTIAL backup to be run using same batch file.
Backup of Exchange is a must. Besides having all the backup data for recovery purpose, it cleans up the exchange transaction log which will use up all your harddisk space eventually.
NTBACKUP can be run in GUI or in command line mode. My example here makes use of the command line mode so that the backup can be scheduled and run automatically.
The reason for this project is I don't have budget for the Exchange mailbox option of my BackupExec. I use NTBACKUP to backup the exchange mailbox which allow me to backup the mailbox while the mailbox is in operation. The backup file is then backup to tape using standard backup method.
The below script is tested on Exchange 2003 server on Windows 2003 Standard.
All you need is to do the below:
- Define Backup Selection (*.bks) (which mailbox to backup) by using Backup Utility (ntbackup.exe)
- run NTBACKUP.EXE
- select the "Backup" tab
- On the left panel, expand the tree node "Microsoft Exchange Server"
- Drill down to the Exchange server you interested in.
- Expand "Microsoft Information Store"
- Check any storage group or individual mailbox you want to include in the "selection".
- On the menu bar, select Job - Save Selection As, and save the selection file in a location which your windows scheduler can later access.
- In this example, I use EXMAIL_EXCHANGE.bks for my file name.
- Create a batch file: backup.bat
- I usually put it alongside with by *.bks file
- Create two backup schedules using standard windows scheduler
Content of Backup.bat
(The original script was in German and was copied from somewhere online but I loss the original URL. I have added email function to ship the log to support tech.)
net use k: \\BACKUPSVR\EXMAIL_backup
IF "%1" == "" goto WRONGINPUT
IF "%1" == "NORMAL" goto START
IF "%1" == "DIFF" goto START
:WRONGINPUT
echo Please
give parameter, either NORMAL or DIFF
pause
goto eof
:START
IF "%1" == "NORMAL" (
REM set BackupJob=SG_Normal
set jobDescription=EXMAIL_SG_Normal
set backupType=normal
) ELSE (
set jobDescription=EXMAIL_SG_Differential
set backupType=differential
)
set BackupJob=%USERPROFILE%\Local Settings\Application Data\Microsoft\Windows
NT\NTBackup\data\EXMAIL_EXCHANGE.bks
set blat=C:\BLATMAIL\blat.exe
set Recipient=support@mydomain.com
set Subj="%computername% Backup Successfully Completed"
set Desc=Backup ran OK for %computername% at %USERDOMAIN% on
set Subj1="%computername% backup completed with exceptions"
set Subj2="%computername% backup failed - no media"
set Subj3="%computername% backup completed with exceptions"
set Subj4="%computername% backup aborted"
set Subj5="%computername% backup failure"
set Subj9="%computername% backup failure"
set Desc1=Problems with Exchange backup
on %computername% at %USERDOMAIN% on
set Desc2=No external hard disk found on
%computername% at %USERDOMAIN% on
set Desc3=Problems with the hard disk
found on %computername% at %USERDOMAIN% on
set Desc4=Backup broken up by user on %computername% at %USERDOMAIN% on
set Desc5=Backup failed - cannot access
file on %computername% at %USERDOMAIN% on
set Desc9=Backup did not successfully
complete on %computername% at %USERDOMAIN% on
set ntbackup=%windir%\system32\NTBACKUP.EXE
set LOGDIR=%USERPROFILE%\Local Settings\Application Data\Microsoft\Windows
NT\NTBackup\data
set blatErrorFile="%temp%\%random%%random%.txt"
set blatTEMPfile="%temp%\%random%%random%.txt"
for /f "Tokens=1-4 Delims=/
" %%i in ('date /t') do set dt=%%k%%j%%i_%%l
for /f "Tokens=1-2 Delims=:
" %%i in ('time /t') do set tm=-%%i%%j
set dtt=%dt%%tm%
echo %dtt%
@REM for %%a in (V W X Y) do if exist %%a:\ set
BackupJob=%%a.bks
@REM if /i
"%BackupJob%"=="V.bks" (
@REM set jobDescription=Full
backup Monday through Friday
@REM set DriveLetter=V
@REM )
@REM if /i
"%BackupJob%"=="W.bks" (
@REM set jobDescription=Friday
backup
@REM set DriveLetter=W
@REM )
@REM if /i "%BackupJob%"=="X.bks"
(
@REM set jobDescription=Monday
and Wednesday backup
@REM set DriveLetter=X
@REM )
@REM if /i
"%BackupJob%"=="Y.bks" (
@REM set jobDescription=Tuesday
and Thursday backup
@REM set DriveLetter=Y
@REM )
@rem set DriveLetter=Y
:RUNBACKUP
rem For a reference of NTBACKUP command line parameters, run NTBACKUP /?, or refer to MS KB814583.
del "\\BACKUPSVR\EXMAIL_backup\SG_%backupType%.bkf"
%ntbackup%
backup "@%BackupJob%" /n "%computername%-%dtt%" /d
"%jobDescription%" /v:no /r:no /rs:no /m %backupType% /j "%computername% SG %backupType%
Backup" /l:f /f "K:\SG_%backupType%.bkf"
/fu
:CHECKLOGFORERRORS
FOR /F %%F IN ('DIR /B /A-D /OD /TW "%LOGDIR%\Backup??.log"') DO (
SET LOGFILE=%%F
)
type "%LOGDIR%\%LOGFILE%" | FINDSTR /C:"damaged or incomplete" > NUL
IF
NOT ERRORLEVEL 1 (
set Subj=%Subj1%
set Desc=%Desc1%
GOTO BLAT
)
type "%LOGDIR%\%LOGFILE%" | FINDSTR /C:"media not found" > NUL
IF
NOT ERRORLEVEL 1 (
set Subj=%Subj2%
set Desc=%Desc2%
GOTO BLAT
)
type "%LOGDIR%\%LOGFILE%" | FINDSTR /C:"device reported an error" > NUL
IF
NOT ERRORLEVEL 1 (
set Subj=%Subj3%
set Desc=%Desc3%
GOTO BLAT
)
type "%LOGDIR%\%LOGFILE%" | FINDSTR /C:"User aborted" > NUL
IF
NOT ERRORLEVEL 1 (
set Subj=%Subj4%
set Desc=%Desc4%
GOTO BLAT
)
type "%LOGDIR%\%LOGFILE%" | FINDSTR /C:"do not have access" > NUL
IF
NOT ERRORLEVEL 1 (
set Subj=%Subj5%
set Desc=%Desc5%
GOTO BLAT
)
type "%LOGDIR%\%LOGFILE%" | FINDSTR /C:"did not successfully complete" > NUL
IF
NOT ERRORLEVEL 1 (
set Subj=%Subj9%
set Desc=%Desc9%
GOTO BLAT
)
REM
Successfull!!
rem Email address of our mailbox for Helpdesk log
set Recipient=monitor@mydomain.com
:BLAT
rem Send email to our help desk to notify the result
echo %Desc% %dtt% > %blatTEMPfile%
%blat% %blatTEMPfile% -server
EXMAIL -f monitor@mydomain.com -to %Recipient% -s %Subj% -attach
"%LOGDIR%\%LOGFILE%"
del /q /f "%blatTEMPfile%"
goto :EOF
:EOF
REM echo Y
| net use k: /delete
rem pause
rem exit
Comments