Scripting your SharePoint Farm Backup with PowerShell in Task Scheduler

Hi guys,

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

[sourcecode language=”xml”]

<?xml version="1.0" encoding="utf-8"?>
<backup version="2.3">
<params>
<backupserver>SERVER_HOST_NAME</backupserver> <!– Name of server if backup share is on remote server –>
<sendemail>TRUE</sendemail> <!– Option: TRUE/FALSE –>
<smtpserver>SMTP_IP</smtpserver>
<environment>My SharePoint (Staging)</environment>
<emailfrom>yihaa_5@hotmail.com</emailfrom>
<emailto>yihaa_5@hotmail.com</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 –>
<backupshare>FarmBackup</backupshare>
<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)–>
</params>
</backup>

[/sourcecode]

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

[sourcecode language=”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"

[/sourcecode]

For above PowerShell, there are certain things that you need to change based on your environment.

Farm-Backup.bat Path

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.

Backup Directory

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.

automated task scheduler for SharePoint Backup

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.

automated task scheduler for SharePoint Backup output

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.

[sourcecode language=”powershell”]

$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

[/sourcecode]

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.

Leave a Reply

Your email address will not be published. Required fields are marked *