Migrate To SharePoint Online using SharePoint Online PowerShell - Updated!
Recently, I have had a few customers how to migrate file share content and/or SharePoint list/library data without the use of 3rd Party tools while retaining metadata. There are a few blogs posts out there that are helpful but I thought I would add an updated post on the process. Check out O365 SharePoint PowerShell!
Requirements:
Migrate File share data/SharePoint content to SharePoint Online while retaining metadata.
Prerequisites:
- SharePoint content being migrated must be at least SharePoint 2010 version. (Source)
- Office 365 Subscription (Destination)
- Azure Subscription
- Download & Install SharePoint Online Management Shell - https://www.microsoft.com/en-us/download/details.aspx?id=35588
Overview
- Prep for migration - if migrating list/library content, you must setup list/library on destination site.
- Package Content
- Convert Packaged Content
- Upload Package Content to Azure
- Start Migration
Create Directories to Package Content
- Create directories to handle packaging of content. These will contain xml information about your content.
- Temp Package > c:\migration\ContosoDocsPackageSource
- Final Package > c:\migration\ContosoDocsPackageTarget
Create Destination List/Library
- If migrating file share data, ensure you have a place to land content in SPO
- If migrating SharePoint list/library content, ensure you have destination list/library with needed columns
Setup Migration
$cred = (Get-Credential admin@contoso.onmicrosoft.com) $sourceFiles = 'C:\temp\migration\ContosoDocsPackage_Source' IF MIGRATING FILESHARE DATA, POINT TO FILES $sourcePackage = 'C:\temp\migration\ContosoDocsPackage_Source' $targetPackage = 'C:\temp\migration\ContosoDocsPackage_Target' $targetWeb = 'https://Contoso.sharepoint.com/' $targetDocLib = 'ContosoDocuments' $adminSite = 'https://Contoso-admin.sharepoint.com' $migrationMap = 'C:\temp\migration\contosoDocsUserMapping.csv' Optionally, map users when migration $azureAccountName = 'YOUR ACCOUNT NAME' $azureAccountKey = 'YOUR ACCOUNT KEY' $azureQueueName = 'YOUR QUEUE NAME, CAN BE ANYTHING' Connect-SPOService -Url $adminSite -Credential $cred
Create Migration Package
If migrating from File Share:
New-SPOMigrationPackage -SourceFilesPath $SourceFiles -OutputPackagePath $sourcePackage -TargetWebUrl $targetWeb -TargetDocumentLibraryPath $targetDocLib
If migrating from SharePoint List/Library content:
On your SharePoint server export your list or library
Export-SPWeb -Identity "https://sp2013/" -Path C:\temp\migration\contosoDocsExport -ItemUrl "/ContosoDocuments/" -NoFileCompression -IncludeUserSecurity -IncludeVersions All
Copy exported files from export above to machine where SPO Management Shell is install (where your creating migration packages) to the "Temp Package."
Convert Migration Package
If migrating from File Share:
New-SPOMigrationPackage -SourceFilesPath $SourceFiles -OutputPackagePath $sourcePackage -TargetWebUrl $targetWeb -TargetDocumentLibraryPath $targetDocLib
If migrating from SharePoint List/Library content: $finalPackages = ConvertTo-SPOMigrationTargetedPackage -SourceFilesPath $sourceFiles -SourcePackagePath $sourcePackage -OutputPackagePath $targetPackage -Credentials $cred -TargetWebUrl $targetWeb -TargetDocumentLibraryPath $targetDocLib -NoAzureADLookup -Verbose -UserMappingFile $migrationMap -ParallelImport
Couple things to note: I'm using -NoAzureADLookup as I don't existing users in target domain and want to map them to new users. Map users by using -UserMappingFile and using -ParallelImport improves migration time when running multiple migrations.
Create CSV:
$csv = New-Item -Path C:\temp\migration -Name userMappingTest.csv -ItemType File -Value "OnPremSID,UPN,isGroup" -Force Add-Content -Path $csv -Value "`nDomain\User,admin@contoso.onmicrosoft.com,FALSE"
Upload to Azure
$al = Set-SPOMigrationPackageAzureSource -SourceFilesPath $sourceFiles -SourcePackagePath $targetPackage -AzureQueueName $azureQueueName -AccountName $azureAccountName -AccountKey $azureAccountKey $al|Format-List
Submit Migration Job
Submit-SPOMigrationJob -TargetWebUrl $targetWeb -MigrationPackageAzureLocations $al -Credentials $cred
Get Job Progress
Get-SPOMigrationJobProgress -TargetWebUrl $targetWeb -Credentials $cred
References:
Use Windows PowerShell cmdlets for SharePoint Online and OneDrive Migration
https://technet.microsoft.com/en-us/library/mt143608.aspx
SharePoint Online and OneDrive Migration User Guide
https://technet.microsoft.com/en-us/library/mt203923.aspx?f=255&MSPPError=-2147217396
SharePoint Online limits and quotas
https://support.office.com/en-us/article/SharePoint-Online-limits-and-quotas-8f34ff47-b749-408b-abc0-b605e1f6d498?ui=en-US&rs=en-US&ad=US
Microsoft Azure Storage Performance and Scalability Checklist
/en-us/azure/storage/storage-performance-checklist
Upload on-premises content to SharePoint Online
https://support.office.com/en-us/article/Upload-on-premises-content-to-SharePoint-Online-555049c6-15ef-45a6-9a1f-a1ef673b867c?ui=en-US&rs=en-US&ad=US