Site Migration using PowerShell in SharePoint 2010

The content migration APIs provide a simple but flexible solution for migrating content between SharePoint Foundation Web sites. You can export the content from a SharePoint site, along with any dependencies (for example, security, roles, versioning, and other metadata), into single or multiple XML-formatted files called content migration packages. On import to the destination Web site, the packaged data is extracted and interpreted. You can also save the packages to a file server before migrating to a different server.

The object model is designed to work with data ranging from an entire Web site to an item in a list or library. You can select the level of metadata to include with migrated content, as well as choose whether to do a full migration or only an incremental change.

Following are some common scenarios for using the content migration APIs:

  • Publishing content from a development server to a staging server and from a staging server to a production server. You can manually trigger the publishing process or drive it with a scheduled job.
  • Allowing end users to export any list and content from a site and import it manually to another site inside or outside of the original server farm.
  • Enabling third-party content management or collaboration solutions to generate data into the published XML schema and use the import capability to migrate content into SharePoint Foundation.
  • Selecting components from a Volume Shadow Copy Service (VSS) restore for import to a SharePoint Foundation Web site.

In short, by using the content migration APIs, you can transfer the right content from the right location at the proper time to the correct destination.

Ways to Use the Content Migration APIs
There are three ways you can invoke the content migration APIs.

  • Windows PowerShell

Using Windows PowerShell, you can use the import and export operations to migrate data. However, you are limited in scope to a site object only. In addition, you do not have the option of retaining GUIDs, which can be necessary in certain scenarios.

  • SOAP

You can use the ExportWeb (String, String, String, Boolean, Boolean, Boolean, Int32) and ImportWeb (String, String, String, Boolean, Boolean, Boolean, Int32) methods implemented in the Sites Web service to migrate data from a remote server. But, as is the case with Stsadm.exe, you are limited in scope to a Web site only. You also do not have the ability to retain GUIDs, which can be a requirement in certain scenarios.

  • Content Migration object model

The object model provides the most control over your data migration scenarios. Using the object model, you can migrate anything, from a Web site to an item in a list, or a single document in a library. You can choose whether to include information about security, versioning, user roles, and other metadata appropriate to the objects you are migrating. The content migration object model is implemented in the Microsoft.SharePoint.Deployment namespace.

Below we will see Windows PowerShell and Content Migration Object Model.

Source Site that will be exported…

Now for exporting the site, we have to use Export-SPWeb command in the PowerShell prompt.

Export-SPWeb -Identity http://SERVERNAME:PORT/2010Lab/ -Path D:\ExportedFiles\SP2010Lab -IncludeUserSecurity -IncludeVersions CurrentVersion

Once the site is exported; we have to use Import-SPWeb from the PowerShell prompt.

Import-SPWeb http://SERVERNAME:PORT/sites/MigratedContent/ImportedSite/ -Path D:\ExportedFiles\SP2010Lab.cmp

After the successful import, the destination site will be”replica of source site.

Destination site after Import using PowerShell