Comment faire pour migrer Sharepoint en ligne (Office 365) un lecteur de contenu d'un utilisateur à l'autre via PowerShell?Migration de Sharepoint en ligne sur le contenu onedrive
Répondre
Jetez un coup d'œil à ce script sur TechNet. Il a certaines restrictions énumérées, mais cela devrait vous donner un bon point de départ.
https://gallery.technet.microsoft.com/office/Copy-OneDrive-files-f1c751e7
Voici quelques-unes des informations essentielles de la page:
Il y a quelques petites choses à garder à l'esprit:
Cela pourrait prendre un certain temps. Chaque fichier ou dossier prend au moins une seconde ou deux à traiter. Si votre utilisateur sortant a des dizaines de milliers de fichiers , et que l'heure n'est pas à vos côtés, vous pouvez utiliser une autre méthode .
Il utilise votre connexion. Il télécharge les fichiers avant de les télécharger sur OneDrive de l'autre utilisateur. Si votre connexion est lente, et vous déplacez des fichiers volumineux que vous pouvez laisser fonctionner sur un serveur hébergé cloud .
Il ne peut pas déplacer des fichiers de plus de 250 Mo Une limitation de ce module de PowerShell est qu'il ne peut pas envoyer des fichiers de plus de 250 Mo à SharePoint. Ce script va prendre note de ces fichiers et en exporter une liste dans c: \ temp \ largefiles.txt au cas où vous voudriez les déplacer manuellement .
Authentification par deux facteurs Ce script ne fonctionne pas avec l'authentification multifacteur sur le compte d'administrateur. Vous voudrez peut-être créer un administrateur temporaire sans MFA à cet effet.
Conditions préalables Pour que ce script fonctionne, vous aurez besoin d'installer les modules suivants PowerShell:
SharePoint Online Management Shell SharePoint Online Management Shell est utilisé pour modifier les autorisations sur les utilisateurs du site de onedrive collections.
Téléchargez et installez ici: https://www.microsoft.com/en-au/download/details.aspx?id=35588
SharePoint PnP Powershell Module Le module Powershell SharePoint PnP fournit les applets de commande que nous allons utiliser pour transférer les fichiers et les dossiers entre les comptes onedrive.
Pour l'installer, ouvrez une fenêtre PowerShell en tant qu'administrateur et exécutez l'applet de commande suivante:
Install-Module SharePointPnPPowerShellOnline -Force
MSOnline V1 Powershell Module Vous aurez également besoin du MSOnline V1 PowerShell Module pour ce script.
Pour l'installer, ouvrez une fenêtre PowerShell en tant qu'administrateur et exécutez l'applet de commande suivante:
Install-Module MSOnline -Force
Et le script lui-même:
$departinguser = Read-Host "Enter departing user's email"
$destinationuser = Read-Host "Enter destination user's email"
$globaladmin = Read-Host "Enter the username of your Global Admin account"
$credentials = Get-Credential -Credential $globaladmin
Connect-MsolService -Credential $credentials
$InitialDomain = Get-MsolDomain | Where-Object {$_.IsInitial -eq $true}
$SharePointAdminURL = "https://$($InitialDomain.Name.Split(".")[0])-admin.sharepoint.com"
$departingUserUnderscore = $departinguser -replace "[^a-zA-Z]", "_"
$destinationUserUnderscore = $destinationuser -replace "[^a-zA-Z]", "_"
$departingOneDriveSite = "https://$($InitialDomain.Name.Split(".")[0])-my.sharepoint.com/personal/$departingUserUnderscore"
$destinationOneDriveSite = "https://$($InitialDomain.Name.Split(".")[0])-my.sharepoint.com/personal/$destinationUserUnderscore"
Write-Host "`nConnecting to SharePoint Online" -ForegroundColor Blue
Connect-SPOService -Url $SharePointAdminURL -Credential $credentials
Write-Host "`nAdding $globaladmin as site collection admin on both OneDrive site collections" -ForegroundColor Blue
# Set current admin as a Site Collection Admin on both OneDrive Site Collections
Set-SPOUser -Site $departingOneDriveSite -LoginName $globaladmin -IsSiteCollectionAdmin $true
Set-SPOUser -Site $destinationOneDriveSite -LoginName $globaladmin -IsSiteCollectionAdmin $true
Write-Host "`nConnecting to $departinguser's OneDrive via SharePoint Online PNP module" -ForegroundColor Blue
Connect-PnPOnline -Url $departingOneDriveSite -Credentials $credentials
Write-Host "`nGetting display name of $departinguser" -ForegroundColor Blue
# Get name of departing user to create folder name.
$departingOwner = Get-PnPSiteCollectionAdmin | Where-Object {$_.loginname -match $departinguser}
# If there's an issue retrieving the departing user's display name, set this one.
if ($departingOwner -contains $null) {
$departingOwner = @{
Title = "Departing User"
}
}
# Define relative folder locations for OneDrive source and destination
$departingOneDrivePath = "/personal/$departingUserUnderscore/Documents"
$destinationOneDrivePath = "/personal/$destinationUserUnderscore/Documents/$($departingOwner.Title)'s Files"
$destinationOneDriveSiteRelativePath = "Documents/$($departingOwner.Title)'s Files"
Write-Host "`nGetting all items from $($departingOwner.Title)" -ForegroundColor Blue
# Get all items from source OneDrive
$items = Get-PnPListItem -List Documents -PageSize 1000
$largeItems = $items | Where-Object {[long]$_.fieldvalues.SMTotalFileStreamSize -ge 261095424 -and $_.FileSystemObjectType -contains "File"}
if ($largeItems) {
$largeexport = @()
foreach ($item in $largeitems) {
$largeexport += "$(Get-Date) - Size: $([math]::Round(($item.FieldValues.SMTotalFileStreamSize/1MB),2)) MB Path: $($item.FieldValues.FileRef)"
Write-Host "File too large to copy: $($item.FieldValues.FileRef)" -ForegroundColor DarkYellow
}
$largeexport | Out-file C:\temp\largefiles.txt -Append
Write-Host "A list of files too large to be copied from $($departingOwner.Title) have been exported to C:\temp\LargeFiles.txt" -ForegroundColor Yellow
}
$rightSizeItems = $items | Where-Object {[long]$_.fieldvalues.SMTotalFileStreamSize -lt 261095424 -or $_.FileSystemObjectType -contains "Folder"}
Write-Host "`nConnecting to $destinationuser via SharePoint PNP PowerShell module" -ForegroundColor Blue
Connect-PnPOnline -Url $destinationOneDriveSite -Credentials $credentials
Write-Host "`nFilter by folders" -ForegroundColor Blue
# Filter by Folders to create directory structure
$folders = $rightSizeItems | Where-Object {$_.FileSystemObjectType -contains "Folder"}
Write-Host "`nCreating Directory Structure" -ForegroundColor Blue
foreach ($folder in $folders) {
$path = ('{0}{1}' -f $destinationOneDriveSiteRelativePath, $folder.fieldvalues.FileRef).Replace($departingOneDrivePath, '')
Write-Host "Creating folder in $path" -ForegroundColor Green
$newfolder = Ensure-PnPFolder -SiteRelativePath $path
}
Write-Host "`nCopying Files" -ForegroundColor Blue
$files = $rightSizeItems | Where-Object {$_.FileSystemObjectType -contains "File"}
$fileerrors = ""
foreach ($file in $files) {
$destpath = ("$destinationOneDrivePath$($file.fieldvalues.FileDirRef)").Replace($departingOneDrivePath, "")
Write-Host "Copying $($file.fieldvalues.FileLeafRef) to $destpath" -ForegroundColor Green
$newfile = Copy-PnPFile -SourceUrl $file.fieldvalues.FileRef -TargetUrl $destpath -OverwriteIfAlreadyExists -Force -ErrorVariable errors -ErrorAction SilentlyContinue
$fileerrors += $errors
}
$fileerrors | Out-File c:\temp\fileerrors.txt
# Remove Global Admin from Site Collection Admin role for both users
Write-Host "`nRemoving $globaladmin from OneDrive site collections" -ForegroundColor Blue
Set-SPOUser -Site $departingOneDriveSite -LoginName $globaladmin -IsSiteCollectionAdmin $false
Set-SPOUser -Site $destinationOneDriveSite -LoginName $globaladmin -IsSiteCollectionAdmin $false
Write-Host "`nComplete!" -ForegroundColor Green
Bien que ce lien peut répondre à la question, il est préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'examen] (/ review/low-quality-posts/17960180) – derloopkat