![]()
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!
