Scripting your SharePoint Farm Backup with PowerShell in Task Scheduler
Today, I would like to share one of the SharePoint admin must-do deployment steps which is to configure a task scheduler and to backup your SharePoint Farm. Note that this is working for both 2010 and 2013 environment.
Also, I’m leveraging this SP Farm Backup script created by good people (thanks for making this powerful and useful script). Please ensure that you have downloaded them and configure the params.xml file base on your corporate needs.
For the interest of those who want to just reference my configuration, below are the xml I used for my SharePoint Farm
<?xml version="1.0" encoding="utf-8"?>
<backupserver>SERVER_HOST_NAME</backupserver> <!– Name of server if backup share is on remote server –>
<sendemail>TRUE</sendemail> <!– Option: TRUE/FALSE –>
<environment>My SharePoint (Staging)</environment>
<emailto>firstname.lastname@example.org</emailto> <!– Multiple recipients must be comma separated –>
<emailcc></emailcc> <!– Multiple recipients must be comma separated –>
<backupwebconfigonly>FALSE</backupwebconfigonly> <!– IMPORTANT: If set to TRUE then web.config is backed up and NOT Virtual Directories –>
<exportsolutions>TRUE</exportsolutions> <!– Option: TRUE/FALSE –>
<backupiis>TRUE</backupiis> <!– Option: TRUE/FALSE –>
<backupgac>TRUE</backupgac> <!– Option: TRUE/FALSE –>
<backupulslogs>TRUE</backupulslogs> <!– Option: TRUE/FALSE –>
<backup14hive>FALSE</backup14hive> <!– Option: TRUE/FALSE –>
<backupfulldays>Sunday</backupfulldays> <!– Used in conjunction with option 1 of backupoption – Days must be comma separated –>
<backupthreads>1</backupthreads> <!– Option: 1 to 10 –>
<backupsites>TRUE</backupsites> <!– Option: TRUE/FALSE –>
<includemysites>FALSE</includemysites> <!– Option: TRUE/FALSE –>
<backupconfigonly>FALSE</backupconfigonly> <!– Option: TRUE/FALSE –>
<backupoption>0</backupoption> <!– Option: 0/1/2 –>
<daystoretain>30</daystoretain> <!– No. of days backups to retain (Must be greater than 1 day. Default: 7 days)–>
The key consideration of the above configuration is on the number of days to retain (daystoretain). You would need to really consult your technical manager in order to craft out the backup data retention period.
Once you have the SP Farm Backup script ready, create a text file name “CreateTaskSchedulerForSPBackup” and subsequently change the extension to “.ps1″ file (PowerShell extension).
Copy the below PowerShell script into the newly created CreateTaskSchedulerForSPBackup PowerShell
$A = New-ScheduledTaskAction -Execute "F:\TaskScheduler\Farm-Backup.bat" -WorkingDirectory "F:\TaskScheduler\"
$T = New-ScheduledTaskTrigger -Daily -DaysInterval 1 -At (Get-Date).Date
$S = New-ScheduledTaskSettingsSet
Register-ScheduledTask -Action $A -User "$($env:USERDOMAIN)\spfarmadmin" -Trigger $T -Settings $S -Force -TaskName "SharePoint Farm Backup" -RunLevel 1 -Password "xxxxxxxx"
For above PowerShell, there are certain things that you need to change based on your environment.
It is assuming that you have copied all the SP Farm Backup downloaded script (together with your params.xml) into F:\TaskScheduler\ Folder of the server running the task scheduler. You only need to configure Task Scheduler in 1 of your SharePoint server only.
Task User Account
For most of the environment, your SP Farm Admin account is not always the local admin account where you access the server and create the task schedule. You will have to explicitly specify the Farm Admin account in the PowerShell as well as the Password of this account so that when the task is running, it takes in the Farm Admin account to perform Backup.
You need to use Farm Admin account to execute the backup script. Else you will hit access denied during the backup job.
Note that your password is entered in plain text. If you wish not to dispose the Password in Script. You can refer to last section on how to do it.
It is also assume that you have created a Shared Folder in the server where you want to store the backup files. It must be a Network Shared Folder. In my example, it will be in “\\SERVER_HOST_NAME\FarmBackup” .
Few things you need to consider when creating this shared folder:
- Central Admin app pool account must have read/write access to the location of the backups.
- SQL Service account must have read/write access to the location of the backups.
- When running a farm backup from STSADM or Windows PowerShell, the account you’re running it as must have read/write access the location of the backups.
- The location must be accessible from the SharePoint machine the backup is running on.
- The location must be accessible from the SQL instance that SharePoint is trying to back up.
Now that you have the script, kindly open PowerShell with Administrator rights in the server where you want to create the Task Scheduler.
Run the CreateTaskSchedulerForSPBackup.ps1
To double check if the task is created successfully, you go to Task Scheduler (taskschd) and check. The task “SharePoint Farm Backup” will be created.
How to avoid storing password into PowerShell Script.
As mentioned just now, you may want to avoid storing your password into the PowerShell Script.
In order to do that, you can use the PowerShell Script below to archive that.
$password = Read-Host -AsSecureString "Enter your password and hit Enter"
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$plainPassword = [RunTime.InteropServices.Marshal]::PtrToStringAuto($bstr)
Register-ScheduledTask -Action $A -User "$($env:USERDOMAIN)\spfarmadmin" -Trigger $T -Settings $S -Force -TaskName "SharePoint Farm Backup" -RunLevel 1 -Password $plainPassword
Save the CreateTaskSchedulerForSPBackup.ps1 and reruns it via PowerShell.
I hope the script to create task schedule can save you some time. It happens to me that manually creating Task Scheduler can be very error prone as there are many clicking in the Task Scheduler UI, repeating the same creation steps in difference farm environment can be very tedious too.