2017-02-05 1 views

Répondre

-1

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 
+0

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