PoshCode Archive  Artifact [84b06ebcab]

Artifact 84b06ebcabbf737609e4809eace9364958938528401db215eb8b18a35b1b7ae9:

  • File Farm-Backup.ps1 — part of check-in [04baef5608] at 2018-06-10 13:34:17 on branch trunk — Site Collection by Site Collection backup of SharePoint 2010 Farm. Script is as is and use at your discretion. I take no credit for the script, other than modifying it for my purposes. I took bits of scripts from 2 sites http://gallery.technet.microsoft.com/scriptcenter/Backup-all-collections-in-726514cb and the other i cannot remember. (user: shilezi size: 6098)

# encoding: utf-8
# api: powershell
# title: Farm Backup
# description: Site Collection by Site Collection backup of SharePoint 2010 Farm. Script is as is and use at your discretion. I take no credit for the script, other than modifying it for my purposes. I took bits of scripts from 2 sites http://gallery.technet.microsoft.com/scriptcenter/Backup-all-collections-in-726514cb and the other i cannot remember.
# version: 0.1
# type: script
# author: shilezi
# license: CC0
# x-poshcode-id: 3998
# x-archived: 2013-03-10T01:38:15
# x-published: 2013-03-05T14:39:00
#
#
##################################
#This errors out in ISE, so use cmd window.
#The script below fixes the error just below.
#Cannot access the local farm. Verify that the local farm is 
#properly configured, currently available, and that you have 
#the appropriate permissions to access the database before 
#trying again.

#Enable-PSRemoting -Force 
#Enable-WSManCredSSP -Role Server -Force

##################################


Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue  
 
 try
 {

   
# specify here your backup folder 
$backupRoot = "\\SERVER\SPFarmBackUP\" 
$logPath = Join-Path $backupRoot "_logs" 
$tmpPath = Join-Path $backupRoot "_tmp" 
# removes all the old backup files on the target folder (valid values: 0 = do not remove; 1 = remove files 
$clearUpOldFiles = 0  
# specifies the days for the backups that should be persisted 
$removeFilesOlderThanDays = -1 
# specifies the backupfolder based on the current weekday (Monday... etc.) 
$todaysBackupFolder = Join-Path $backupRoot ((Get-Date).DayOfWeek.toString())  
 
# generate all necessary folders if they are missing 
if (-not (Test-Path $logPath)) {   
  New-Item $logPath -type directory 
}  
 
if (-not (Test-Path $tmpPath)) {   
  New-Item $tmpPath -type directory 
}  
 
if (-not (Test-Path $todaysBackupFolder)) {   
  New-Item $todaysBackupFolder -type directory 
}  
 
# creates a log file  
Start-Transcript -Path (Join-Path $logPath ((Get-Date).ToString('MMddyyyy_hhmmss') + ".log"))

$TXTFile = Join-Path $logPath ((Get-Date).ToString('MMddyyyy_hhmmss') + ".log")

# loop over all web applications (specify filter criteria here if you want to filter them out) 
foreach ($webApplication in Get-SPWebApplication) {     
  Write-Host     
  Write-Host     
  Write-Host "Processing $webApplication"    
  Write-Host "*******************************"          
 
  foreach ($site in $webApplication.Sites) {                 
    # we have to replace some characters from the url name         
    $name = $site.Url.Replace("http://", "").Replace("https://", "").Replace("/", "_").Replace(".", "_");         
    # replace all special characters from url with underscores         
    [System.Text.RegularExpressions.Regex]::Replace($name,"[^1-9a-zA-Z_]","_");                  
    # define the backup name         
    $backupPath = Join-Path $tmpPath ($name + (Get-Date).ToString('MMddyyyy_hhmmss') + ".bak")                  
 
    Write-Host "Backing up $site to $backupPath"         
    Write-Host                  
     
    # backup the site         
    Backup-SPSite -Identity $site.Url -Path $backupPath     
  }          
 
  Write-Host "*******************************"     
  Write-Host "*******************************" 
}  
 
Write-Host 
Write-Host  
 
# remove the old backup files in the todays folder if specified 
if ($clearUpOldFiles -eq 1) {   
  Write-Host "Cleaning up the folder $todaysBackupFolder"   
  Remove-Item ($todaysBackupFolder + "\*")  
}  
 
# move all backup files from the tmp folder to the target folder 
Write-Host "Moving backups from $tmpPath to $todaysBackupFolder" 
Move-Item -Path ($tmpPath + "\*") -Destination $todaysBackupFolder 
# you can specify an additial parameter that removes filders older than the days you specified 
if ($removeFilesOlderThanDays -gt 0) {   
  Write-Host "Checking removal policy on $todaysBackupFolder"   
  $toRemove = (Get-Date).AddDays(-$removeFilesOlderThanDays)   
  $filesToRemove = Get-ChildItem $todaysBackupFolder | Where {$_.LastWriteTime -le �$toRemove�}      
 
  foreach ($fileToRemove in $filesToRemove)  {     
    Write-Host "Removing the file $fileToRemove because it is older than $removeFilesOlderThanDays days"      
    Remove-Item (Join-Path $todaysBackupFolder $fileToRemove) | out-null   
  } 
} 
  
Stop-Transcript

    
  $today = (Get-Date -Format MM-dd-yyyy)
 # Edit the From Address as per your environment.
  $emailFrom = "admin@domain.com"
 # Edit the mail address to which the Notification should be sent.
  $emailTo = "admin@domain.com"
 # Subject for the notification email. The + �$today� part will add the date in the subject.
  $subject = "Site collections on Farm Backup Report for this day "+"$today"
 # Body or the notification email. The + �$today� part will add the date in the subject.
  $body = "The SharePoint backup of all Site collections in the farm has been run and was successful this day "+"$today"
  # IP address of your SMTP server. Make sure relay Is enabled for the SharePoint server on your SMTP server
  $smtpServer = "smtp.domain.com"
  $smtp = new-object Net.Mail.SmtpClient($smtpServer)
  Send-MailMessage -SmtpServer $smtpServer -From $emailFrom -To $emailTo -Subject $subject -Body $body -Attachment $TXTFile
  

}

catch
{
  [System.Exception] 
  $ErrorMessage = $_.Exception.Message
  # Configure the below parameters as per the above.
  $emailFrom = "admin@domain.com"
  $emailTo = "admin@domain.com"
  $subject = "Site collections on Farm Backup Report for this day "+"$today"
  $body = "The SharePoint backup of all Site collections in the farm has been run and the Job failed today, the "+"$today because... $ErrorMessage."
  $smtpServer = "smtp.domain.com"
  $smtp = new-object Net.Mail.SmtpClient($smtpServer)
  Send-MailMessage -SmtpServer $smtpServer -From $emailFrom -To $emailTo -Subject $subject -Body $body
}