Automating SharePoint Backup and Restore using PnP PowerShell

Loading

Backing up and restoring SharePoint Online sites is crucial for data protection and business continuity. PnP PowerShell provides efficient ways to automate backup and restore operations. While SharePoint Online doesn’t support traditional backup like SharePoint Server, PnP PowerShell allows exporting/importing data and configurations to facilitate recovery.


Step 1: Install and Connect PnP PowerShell

Ensure PnP PowerShell is installed:

Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force

Connect to SharePoint Online:

$AdminSiteUrl = "https://yourtenant-admin.sharepoint.com"
Connect-PnPOnline -Url $AdminSiteUrl -Interactive

Connected to SharePoint Online!


Step 2: Backup SharePoint Site Collections

SharePoint Online does not provide a full site collection backup like SharePoint Server. However, you can export site contents and metadata using PnP Provisioning Templates.

2.1 Export Site Template

This exports a site’s structure (lists, libraries, pages, settings) to an .xml file.

$SiteUrl = "https://yourtenant.sharepoint.com/sites/YourSite"
Connect-PnPOnline -Url $SiteUrl -Interactive
Get-PnPProvisioningTemplate -Out "C:\Backups\YourSiteTemplate.xml"
Write-Host "Backup Completed: Site template exported successfully!"

Site template exported!

2.2 Backup Document Libraries

To back up document libraries, download all files:

$Library = "Documents"
$BackupFolder = "C:\Backups\Documents"
New-Item -ItemType Directory -Path $BackupFolder -Force
$Files = Get-PnPListItem -List $Library
foreach ($File in $Files) {
$FileUrl = $File["FileRef"]
$FileName = Split-Path -Leaf $FileUrl
Get-PnPFile -Url $FileUrl -Path $BackupFolder -AsFile -Force
}
Write-Host "Backup Completed: Documents downloaded successfully!"

Document library backed up!

2.3 Backup List Data

Export list data to CSV:

$ListName = "Tasks"
$Items = Get-PnPListItem -List $ListName
$Items | Select Title, Status, AssignedTo, Created | Export-Csv -Path "C:\Backups\TasksBackup.csv" -NoTypeInformation
Write-Host "Backup Completed: List data exported!"

List data backed up!


Step 3: Restore SharePoint Sites

3.1 Restore Site Template

To recreate a site using the backup template:

$NewSiteUrl = "https://yourtenant.sharepoint.com/sites/RestoredSite"
Connect-PnPOnline -Url $NewSiteUrl -Interactive
Apply-PnPProvisioningTemplate -Path "C:\Backups\YourSiteTemplate.xml"
Write-Host "Restore Completed: Site template applied!"

Site structure restored!

3.2 Restore Document Libraries

Upload files back to SharePoint:

$Library = "Documents"
$BackupFolder = "C:\Backups\Documents"
$Files = Get-ChildItem -Path $BackupFolder
foreach ($File in $Files) {
Add-PnPFile -Path $File.FullName -Folder $Library
}
Write-Host "Restore Completed: Documents uploaded successfully!"

Documents restored!

3.3 Restore List Data

Import list data from CSV:

$ListName = "Tasks"
$Items = Import-Csv -Path "C:\Backups\TasksBackup.csv"
foreach ($Item in $Items) {
Add-PnPListItem -List $ListName -Values @{
"Title" = $Item.Title
"Status" = $Item.Status
"AssignedTo" = $Item.AssignedTo
}
}
Write-Host "Restore Completed: List items added successfully!"

List data restored!


Step 4: Automate Backup and Restore with Scheduled Task

4.1 Create a Backup Script

Save this as BackupScript.ps1:

$SiteUrl = "https://yourtenant.sharepoint.com/sites/YourSite"
Connect-PnPOnline -Url $SiteUrl -Interactive
Get-PnPProvisioningTemplate -Out "C:\Backups\YourSiteTemplate.xml"
Write-Host "Backup Completed!"

4.2 Schedule Task in Windows

1️⃣ Open Task Scheduler → Create Basic Task
2️⃣ Set trigger to Daily
3️⃣ Set action to Start a program → Select powershell.exe
4️⃣ Add argument:

-File "C:\Scripts\BackupScript.ps1"

Automated backups scheduled!

Leave a Reply

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