Powershell Backup Script

Needed a backup script which i can run from the powershell or with use of the Windows schedular.

I’ve created some checks on folders and succesrate. The scripts also can email you when backup is succesful/failed.

If you have any suggestions please let me know!

##################################### Backup Script ###############################################
## Name: Backup_Script.ps1                               
## Creator: Erwin Bierens                     
## CreationDate: 10-02-2017                               
## LastModified: 10-02-2017                                
## Version: 1.0
## Website: https://erwinbierens.com/powershell-backup-script
## 
## Description: Copies the Backupdir to the Destination folder
## Deviations will be written to logfile
## Only Change Variables in Variables Section  
##
## Thx to the followingg scripts i created this one, source information
## http://www.krist-online.nl/index.php/scripts/14-robocopy-powershell-wekelijks-backup-schema
## https://blog.sat.iit.edu/2011/11/backup-script-using-robocopy-and-powershell/
## 
##
## Example: powershell -command "& 'c:\temp\Backup_Script.ps1' "
## 
####################################################################################################

####################
##Variables Section
####################

## Source directory
$source="C:\Temp\Backup\A"
 
## Destination Directory
## you can also use the network path "\\server\share"
$destination="C:\Temp\Backup\B\"
 
## Destination Log File
$logfile="c:\temp\backup\logbestand.txt"
 
## BackupRapport is being used to check if backup is succesfull
$backupReport="c:\temp\logfile_backup.txt"
 
## Make changes for email reports
$EmailFrom="backupscript@bierens.it"
$EmailTo="erwin@bierens.it"
$SMTPServer="192.168.178.32"

## Email Subjects and Body info
$successEmailSubject="Backup Succesfull"
$successEmailBody="The Backup is succesfull"
$failEmailSubject="Backup Failed"
$failEmailBody="The backup is failed, please check the attached log file"

## =========================================================
## =========== DONT CHANGE PARAMETERS BELOW ================
## =========================================================

## Check if destination exists, if no create folder
if (!(Test-Path -path $destination))
{
New-Item $destination -type directory
}
 
## robocopy command
## /XO Excludes older files.
## /COPY:DATSO Specifies the file properties to be copied. D Data, A Attributes, T Time stamps, S NTFS access control list (ACL), O Owner information
## /E /Purge Mirrors a directory tree
## /R:10 Specifies the number of retries on failed copies. The default value of N is 1,000,000 (one million retries)
## /log: Writes the status output to the log file (overwrites the existing log file). use /log+: for appending 
## /NP Specifies that the progress of the copying operation (the number of files or directories copied so far) will not be displayed.
robocopy $source $destination *.* /XO /COPY:DATSO /E /purge /R:10 /log:$logfile /NP
 
## Check variables to compare source and destination
$check_source = Dir $source
$check_destination = Dir $destination
 
## Compare source and destination, write deviations to backup report 
Compare-Object $check_source $check_destination -PassThru > $backupReport
 
## Create and send email after succesfull backup
function sendSuccessEmail{
send-mailmessage -from $EmailFrom -to $EmailTo -subject $successEmailSubject -body $successEmailBody -Attachments "$logfile" -priority High -dno onSuccess, onFailure -smtpServer $SMTPServer
}
 
## Create and send email after unsuccesfull backup
function sendFailEmail{
send-mailmessage -from $EmailFrom -to $EmailTo -subject $failEmailSubject -body $failEmailBody -Attachments "$logfile" -priority High -dno onSuccess, onFailure -smtpServer $SMTPServer
}
 
## If backupreport is empty, backup is succesfull send email
$File = Get-ChildItem $backupReport
if ($File.Length -eq 0) {sendSuccessEmail}
 
## If backup report is not empty, something is going wrong. Email will be send
$File = Get-ChildItem $backupReport
if ($File.Length -gt 0) {sendFailEmail}
#EOF
Continue Reading