SharePoint Online: Copy List or Document Library to Another Site using PnP PowerShell

Requirement: Copy Document Library to another site using PowerShell

SharePoint Online: Copy Document Library to Another site using PnP PowerShell

PnP provisioning engine lets us copy site objects such as lists and libraries, site columns, content types, composed looks, pages, etc. We can export existing customization to an XML file and use it as a template to create new objects from it. We can copy lists and libraries between SharePoint Online site collections with the help of the PnP Provisioning Engine. Here is the PowerShell script:

Use PnP Provisioning Template Method to Copy List

Step 1: Get the List Schema from Source Site
With the PnP provisioning engine, we need to extract the list schema first:

#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing/"
$ListName = "Project Tasks"
$TemplateFile = "C:\Temp\ListSchema.xml"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Get the List schema as Template and export to a File
$Templates = Get-PnPSiteTemplate -OutputInstance -Handlers Lists
$ListTemplate = $Templates.Lists | Where-Object { $_.Title -eq $ListName }
$Templates.Lists.Clear()
$Templates.Lists.Add($ListTemplate)
Save-PnPSiteTemplate -InputInstance $Templates -Out $TemplateFile

This script creates an XML template file that contains all list schema from the SharePoint Online site and then filters to get the specific list.

Step 2: Apply the Template in the Target Site
Once we have the template XML file ready, we can import it to any site collection, as:

#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Operations/"
$TemplateFile = "C:\Temp\ListSchema.xml"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

Write-Host "Creating List from Template..."
Invoke-PnPSiteTemplate -Path $TemplateFile

This PowerShell script copies list or document library from the source site to the destination site collection.

Copy List Structure using Site Designs and Site Scripts

Here is how you can copy list structure using site design and scripts with PowerShell:

#Define Parameters
$AdminCenterURL = "https://crescent-admin.sharepoint.com"
$ListURL = "https://crescent.sharepoint.com/sites/marketing/Lists/Source"
$TargetSiteURL = "https://crescent.sharepoint.com/sites/procurement/"

#Connect to SharePoint Online
Connect-SPOService -Url $AdminCenterURL -credential (Get-Credential)

#Get the list schema
$ListSchema = Get-SPOSiteScriptFromList -ListUrl $ListURL

#Add list schema as Site Script 
$SiteScript = Add-SPOSiteScript -Title "Project Tasks List" -Content $ListSchema

#Create a Site Design
$SiteDesign = Add-SPOSiteDesign -Title "Provision Project Tasks List" -WebTemplate 64 -SiteScripts $SiteScript.Id

#Apply Site Design to site
Invoke-SPOSiteDesign -Identity $SiteDesign.Id -WebUrl $TargetSiteURL

If you want to copy list items between lists, use: How to Copy List Items Between Lists in SharePoint Online using PowerShell?

Salaudeen Rajack

Salaudeen Rajack - SharePoint Expert with Two decades of SharePoint Experience. Love to Share my knowledge and experience with the SharePoint community, through real-time articles!

7 thoughts on “SharePoint Online: Copy List or Document Library to Another Site using PnP PowerShell

Leave a Reply

Your email address will not be published.