We have a live communication modern site, and i want to duplicate this site and all its content into a test site so i can test things before modifying the live. so is this possible inside SharePoint online? or are there any free tools to achieve this?


Probably your best option is using the PnP Provisioning Framework. This framework was initially started as a better approach to templating, intending to replace the classic web templates and site definitions, but has grown into much more.

Although there are numerous options that I won't cover here, a basic script using the Provisioning Framework in PnP-PowerShell would look something like this:

$sourceConn = Connect-PnPOnline -Url https://yoursite.sharepoint.com/sites/site1 -UseWebLogin -ReturnConnection
$destConn = Connect-PnPOnline -Url https://yoursite.sharepoint.com/sites/site2 -UseWebLogin -ReturnConnection

Get-PnPProvisioningTemplate -Out template.pnp -connection $sourceConn

Apply-PnPProvisioningTemplate -Path template.pnp -connection $destConn

|improve this answer|||||
  • thanks for the usful reply. but will this code affect the source list by any mean? i do not think so, is this correct? so is it safe to perform on a live site? – SharePoint TestDev Feb 21 at 23:00
  • The 'Get' function will affect nothing but the file you output to. The 'Apply' function, however, if done to an already in-use site could wreak havoc. So be very careful where you apply it. – willman Feb 21 at 23:55
  • i tried your appraoch but i got this error Get-PnPProvisioningTemplate : The remote server returned an error: (403) Forbidden. At line:1 char:1 + Get-PnPProvisioningTemplate -Out template.pnp -connection $sourceConn on Get-PnPProvisioningTemplate -Out template.pnp -connection $sourceConn – SharePoint TestDev Feb 25 at 13:00
  • Sorry, I forgot that the Connect-PnPOnline needs to have the ` -ReturnConnection` if you need to save the connection in a variable, your two $..conn objects were probably both null. I edited the answer to show those parameters. Also, you generally have to be a site collection admin of the sites you are connecting to to use the provisioning cmdlets. – willman Feb 25 at 14:49

Not the answer you're looking for? Browse other questions tagged or ask your own question.