Use the Copy-M365UserDrives cmdlet to copy the contents of multiple Microsoft 365 user drives.
Copy-M365UserDrives
-Target <String>
[-ShowPrereqs]
[<CommonParameters>]
Copy-M365UserDrives
-Target <String>
-Csv <String>
[-TranslationCsv <String>]
[-SourceFolder <String>]
[-TargetFolder <String>]
[-IncludePattern <String>]
[-ExcludePattern <String>]
[-MaxAge <String>]
[-MinAge <String>]
[-DryRun]
[-NoCache]
[-Verbosity <String>]
[<CommonParameters>]
Use this cmdlet to copy the contents of a list of user drive pairs.
See the Examples section for cmdlet requirements.
Description
This example copies the contents of user drives to paired user drives in Google Workspace.
Provider configuration
| Provider | Direction | APIs | Scopes |
|---|---|---|---|
| Microsoft 365 | Source | Microsoft Graph | Files.ReadWrite.All |
| Google Workspace | Target | Google Drive | https://www.googleapis.com/auth/drive |
CSV format
| SourceId | TargetId |
|---|---|
TMCTools
@{
Source = @{
M365Tenant = '<TENANT_ID>'
M365ClientId = '<CLIENT_ID>'
M365ClientSecret = '<CLIENT_SECRET>'
}
Target = @{
GOAdmin = '<ADMIN_ID>'
GOServiceAccountKey = '<KEYFILE_PATH>'
}
}
Copy-M365UserDrives -Csv 'user_drives.csv' -Target Google
Description
This example copies the contents of user drives to paired user drives in Microsoft 365.
Provider configuration
| Provider | Direction | APIs | Scopes |
|---|---|---|---|
| Microsoft 365 | Source | Microsoft Graph | Files.ReadWrite.All |
| Microsoft 365 | Target | Microsoft Graph | Files.ReadWrite.All |
CSV format
| SourceId | TargetId |
|---|---|
TMCTools
@{
Source = @{
M365Tenant = '<TENANT_ID>'
M365ClientId = '<CLIENT_ID>'
M365ClientSecret = '<CLIENT_SECRET>'
}
Target = @{
M365Tenant = '<TENANT_ID>'
M365ClientId = '<CLIENT_ID>'
M365ClientSecret = '<CLIENT_SECRET>'
}
}
Copy-M365UserDrives -Csv 'user_drives.csv' -Target M365
Description
This example copies the contents of user drives to paired user drives in the local filesystem.
Provider configuration
| Provider | Direction | APIs | Scopes |
|---|---|---|---|
| Microsoft 365 | Source | Microsoft Graph | Files.ReadWrite.All |
| Windows filesystem | Target | N/A | N/A |
CSV format
| SourceId | TargetId |
|---|---|
TMCTools
@{
Source = @{
M365Tenant = '<TENANT_ID>'
M365ClientId = '<CLIENT_ID>'
M365ClientSecret = '<CLIENT_SECRET>'
}
Target = @{}
}
Copy-M365UserDrives -Csv 'user_drives.csv' -Target Windows
The path to a CSV file containing drives to process. See the examples for the required CSV format.
Type: String
Parameter Sets: Action
Aliases:
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
When specified, only log what would happen instead of actually transferring data.
Type: SwitchParameter
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
A matching pattern to determine which folders and files to exclude. Syntax details can be found here.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
A matching pattern to determine which folders and files to include. Syntax details can be found here.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
The maximum age (modified time) of files to include. Syntax details can be found here.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
The minimum age (modified time) of files to include. Syntax details can be found here.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
Refresh tokens obtained from a prior authentication will be used by default. If you are running different tools that require different permissions or want to log in as a different user, use the -NoCache option to bypass an existing refresh token.
Type: SwitchParameter
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
Prints the cmdlet prerequisites.
Type: SwitchParameter
Parameter Sets: Help
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
Restrict the source-side listing to the specified folder.
Note that this parameter is a global option that applies to all drives listed in the CSV file.
This parameter has no effect if the SourceFolder CSV field is set.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
The target provider.
Type: String
Parameter Sets: (All)
Aliases:
Accepted values: Dropbox, Google, M365, Windows
Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
Specifies the name of a top-level folder in the target into which all data will be transferred. The source folder hierarchy is preserved under the specified folder.
Note that this parameter is a global option that applies to all drives listed in the CSV file.
This parameter has no effect if the TargetFolder CSV field is set.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
The path to a CSV file containing translation mappings. The file must use
SourceName;TargetName as the field identifiers.
Type: String
Parameter Sets: Action
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
The amount of detail logged during processing.
Type: String
Parameter Sets: Action
Aliases:
Accepted values: None, Normal, Detailed, Diagnostic
Required: False
Position: Named
Default value: Detailed
Accept pipeline input: False
Accept wildcard characters: False
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.
Required config.psd1 keys
These configuration keys are scoped to the Source node in config.psd1.
M365ClientId: The client ID of your tenant’s app.
M365ClientSecret: The client secret of your tenant’s app.
M365Tenant: The ID of your tenant. For example, source.org.
These configuration keys are scoped to the Target node in config.psd1.
DBXAdmin: The ID of your tenant’s administrator. This must be in dbmid:Q7mX2vK9cR4nT8zLp5aW3yF6uJ1sHdB0eNg
format. Only applies to a Dropbox target.
DBXClientId: The client ID of your tenant’s app. Only applies to a Dropbox target.
DBXClientSecret: The client secret of your tenant’s app. Only applies to a Dropbox target.
GOAdmin: The ID of your tenant’s administrator. Only applies to a Google Workspace target.
GOServiceAccountKey: The path to your service account’s JSON key file. Only applies to a Google Workspace target.
M365ClientId: The client ID of your tenant’s app. Only applies to a Microsoft 365 target.
M365ClientSecret: The client secret of your tenant’s app. Only applies to a Microsoft 365 target.
M365Tenant: The ID of your tenant. For example, target.org. Only applies to a Microsoft 365 target.
Optional config.psd1 keys
These configuration keys are scoped to the Source node in config.psd1.
M365CloudEnvironment: The cloud environment for your tenant. Allowed values are Global, China (.cn),
Germany (.de) and USGovernment (.us).
Default: Global
These configuration keys are scoped to the Target node in config.psd1.
M365CloudEnvironment: The cloud environment for your tenant. Allowed values are Global, China (.cn),
Germany (.de) and USGovernment (.us). Only applies to a Microsoft 365 target.
Default: Global
These configuration keys are scoped to the Rclone node in config.psd1.
IncludeMetadata: Determines whether Rclone will fetch metadata for files. This option enables or disables
migrating permissions. Note that including metadata can increase processing time significantly.
Default: $false
SkipIfNoTranslation: Determines how to handle permissions for entities that have no match in the translation table.
Set to $true to prevent the entity from being propagated to the target’s metadata. Set to $false to propagate the
untranslated name to the target’s metadata.
Default: $false
Required APIs
Google:
Google DriveM365:
Microsoft GraphRequired scopes
Google:
https://www.googleapis.com/auth/driveM365 Graph Application:
Files.ReadWrite.AllDropbox:
account_info.readfiles.content.readfiles.content.writefiles.metadata.readmembers.readteam_data.memberCSV format
The required fields vary by target. Each example shows the required fields for that target. The following fields are optional:
SourceDisplayNameSourceFolderTargetDisplayNameTargetFolderKnown limitations