Use PowerShell to automate your Google Drive to OneDrive for Business migration.
Index
Prerequisites
-
Global Administrator or SharePoint Administrator permissions are required.
-
Your Google drive domain is set to work in Administrator Mode.
-
Your OneDrives have been provisioned.
- This can be automated with the Get-OneDriveURL cmdlet.
Note: For a OneDrive migration the required permission is site collection administrator. The script in this article has commands to add site collection administrator permissions at the beginning of a OneDrive migration and to remove the permissions after it is completed. You need Global Administrator or SharePoint Administrator permissions for the commands to work.
Create a CSV guide for your migration
- Download a list of all your Google Drive user emails as a CSV.
- Open the CSV file generated from Google Drive.
- Edit the file so you only have one column with your user's Google Drive email addresses.
- Insert a new row at the top for the header.
- Name the first column GOOGLEDRIVEEMAIL.
- Open ShareGate Desktop.
- Go to All reports.
- Click on Create custom report in the top right corner.
- Select OneDrive for Business
as your object type.
- Click Continue without saving.
- Select your Tenant.
- Click on Run.
- Click on Export in the top right corner.
- Save the file on your drive, and open it.
- Replace the Site address header by ONEDRIVEURL.
- Combine the two spreadsheets so that each directory corresponds to the correct URL in your rows.
Note: If sorting alphabetically doesn't work, you can reorganize your data manually or you can look for a solution with Excel macros or PowerShell. - Save this new file as a CSV on your drive.
Create your script
Copy and paste the following script in the PowerShell application of your choice.
Import-Module Sharegate
$csvFile = "C:\MigrationPlanning\onedrivemigration.csv" $table = Import-Csv $csvFile -Delimiter "," $googleDrive= Connect-GoogleDrive -Email admin@mycompany.com -Admin
$mypassword = ConvertTo-SecureString "mypassword" -AsPlainText -Force Set-Variable dstSite, dstList foreach ($row in $table) { Clear-Variable dstSite Clear-Variable dstList $dstSite = Connect-Site -Url $row.ONEDRIVEURL -Username "myusername" -Password $mypassword
Add-SiteCollectionAdministrator -Site $dstSite $dstList = Get-List -Name Documents -Site $dstSite Import-GoogleDriveDocument -GoogleDrive $googleDrive -SourceFolder $row.GOOGLEDRIVEEMAIL -SourceView "MyDocuments" -DestinationList $dstList
Remove-SiteCollectionAdministrator -Site $dstSite }
Adjust your script so that it will work for you. Here are a few guidelines:
- $csvFile: Adjust the path so that it points to the CSV file you saved before.
- $table: The delimiter is the symbol your CSV uses to separate your items in a row. Make sure your script uses the same delimiter as your file (a quick way to verify this, is by opening the CSV with Notepad).
- $googleDrive: Replace the email by your Google Drive admin email.
- $mypassword: Replace "mypassword" by your Microsoft 365 admin account password.
-
$dstSite: Replace "myusername" by your Microsoft 365 admin account user name.
- Connect-Site: If you need to change the authentication method, you will find how to do it in the Connect Site article.
- Set-variable and Clear-Variable: These commands help prevent an issue where a connection failure can cause your data to end up in the wrong OneDrive. If you have to use the browser connection method, you will have to remove these lines.
- foreach: We use foreach to loop through the values in your CSV file. You can find more about it here.
- Add-SiteCollectionAdministrator and Remove-SiteCollectionAdministrator: Adds your user account as site collection administrator before your migration, and removes it after.
Run your script once it is properly adjusted and tested.
Notes:
- To migrate your documents to a new folder in your OneDrives, you must create the folder beforehand.
- Migration reports are automatically generated, and you will be able to find them in Tasks. You can also export the reports in your script with Export-Report.
- You can schedule your migration using PowerShell to run it off-hours and optimize performance.
- To perform an incremental migration, check the the Incremental update using PowerShell article.