PowerShell Script to Automate Backup and Restore of SharePoint 2010 site

The script gets input from BackupRestoreDetails.csv file which has the details on SourceURL, DestinationURL, DatabaseServer, DatabaseName . The script and input CSV file format is attached.

  1. $LogTime = Get-Date -Format yyyy-MM-dd_hh-mm  
  2. $LogFile = ".\BackupRestorePatch-$LogTime.rtf"  
  3.  
  4. # Add SharePoint PowerShell Snapin  
  5.   
  6.   
  7. if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) {  
  8.     Add-PSSnapin Microsoft.SharePoint.Powershell  
  9. }  
  10.   
  11. $scriptBase = split-path $SCRIPT:MyInvocation.MyCommand.Path -parent  
  12. Set-Location $scriptBase  
  13.  
  14.  
  15. #Deleting any .rtf files in the scriptbase location  
  16. $FindRTFFile = Get-ChildItem $scriptBase\*.* -include *.rtf  
  17. if($FindRTFFile)  
  18. {  
  19.  foreach($file in $FindRTFFile)  
  20.   {  
  21.    remove-item $file  
  22.   }  
  23. }  
  24.   
  25.   
  26. start-transcript $logfile  
  27.   
  28. Function BackUpRestore([String]$SourceURL, [String]$DestinationURL, [String]$DatabaseServer, [String]$DatabaseName)  
  29. {  
  30.    
  31.  $Site = get-spsite $SourceURL  
  32.   
  33.  $SiteID = $Site.ID.GUID  
  34.    
  35.  Write-host "Creating folder for the backup" -fore Magenta  
  36.  New-Item $scriptbase\$SiteID -type directory  
  37.  Write-host "folder created for the export" -fore Magenta  
  38.   
  39.  $BackupPath = $scriptbase + "\" + $SiteID + "\" + $SiteID + ".bak"  
  40.  write-host "Backup path is " $BackupPath -fore cyan  
  41.   
  42.  Write-host "Performing backup for the site " $SourceURL -fore yellow  
  43.  Backup-spsite -identity $SourceURL -path $BackupPath  
  44.  write-host "Backup completed" -fore green  
  45.   
  46.  Write-host "Performing restore on site " $DestinationURL -fore yellow  
  47.  Restore-Spsite -identity $DestinationURL -path $BackupPath -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName -confirm:$false  
  48.  Write-host "Restore completed for the site " $DestinationURL -fore green  
  49.   
  50.  Write-host "Deleting folder" $scriptbase\$SiteID  
  51.  remove-item $scriptbase\$SiteID -recurse -confirm:$false  
  52.  write-host "Folder deleted successfully"  
  53.   
  54. }  
  55.   
  56. function sendMail{  
  57.   
  58.      Write-Host "Sending Email"  
  59.  
  60.      #SMTP server name  
  61.      $smtpServer = "SMTP address"  
  62.  
  63.      #Creating a Mail object  
  64.      $msg = new-object Net.Mail.MailMessage  
  65.  
  66.      #Creating SMTP server object  
  67.      $smtp = new-object Net.Mail.SmtpClient($smtpServer)  
  68.  
  69.      #Email structure   
  70.      $msg.From = "[email protected]"  
  71.      $msg.ReplyTo = "[email protected]"  
  72.      #For multiple to address, seperate the address with comma  
  73.      $msg.To.Add("[email protected],[email protected]")  
  74.      $msg.subject = "Backup/Restore Completed"  
  75.      $msg.body = "Backup/Restore Completed."  
  76.  
  77.      #Sending email   
  78.      $smtp.Send($msg)  
  79.   
  80. }  
  81.   
  82.   
  83. write-host "You have choosen to do an BACKUP/RESTORE" -fore cyan  
  84. write-host "Please place the BackupRestoreDetails.csv under the folder where the powershell script is placed" -fore yellow  
  85. sleep(3)  
  86. $ans  = read-host "Did you place the file? (y/n) "  
  87. if($ans -eq 'y')  
  88. {  
  89.  $csvfile1 = $scriptbase + "\" + "BackupRestoreDetails.csv"  
  90.  import-csv $csvfile1 | where {  
  91.  BackUpRestore $_.SourceURL $_.DestinationURL $_.DatabaseServer $_.DatabaseName  
  92.  }  
  93.  sendMail  
  94. }  
  95.   
  96. else  
  97. {  
  98.   
  99. write-host "The user hasn't placed the file and choosen to exit" -fore cyan  
  100.   
  101. }  
  102.   
  103. stop-transcript