2017-02-05 6 views

Antwort

-1

Sehen Sie sich dieses Skript auf TechNet an. Es hat einige Einschränkungen, aber es sollte Ihnen einen guten Startpunkt geben.

https://gallery.technet.microsoft.com/office/Copy-OneDrive-files-f1c751e7

Hier sind einige der wichtigsten Informationen von der Seite:

Es gibt ein paar Dinge im Auge zu behalten:

Dies könnte eine Weile dauern. Jede Datei oder jeder Ordner benötigt mindestens eine oder zwei Sekunden, um verarbeitet zu werden. Wenn Ihr abfahrender Benutzer Zehntausende von Dateien hat und die Zeit nicht auf Ihrer Seite ist, können Sie eine andere Methode verwenden.

Es verwendet Ihre Verbindung. Es lädt die Dateien herunter, bevor sie auf das OneDrive des anderen Benutzers hochgeladen werden. Wenn Ihre Verbindung langsam ist und Sie große Dateien verschieben, möchten Sie dies möglicherweise auf einem cloud-gehosteten Server ausführen lassen.

Es kann nicht Dateien, die größer als 250 MB Eine Einschränkung dieser Powershell-Modul bewegen ist, dass es nicht Dateien, die größer als 250 MB zu Sharepoint senden. Dieses Skript merkt sich diese Dateien und exportiert eine Liste von ihnen nach c: \ temp \ largefiles.txt, falls Sie sie manuell verschieben möchten: .

Keine Zwei-Faktor-Authentifizierung Dieses Skript funktioniert nicht mit Multifaktor-Authentifizierung auf dem Administratorkonto. Möglicherweise möchten Sie einen temporären Admin ohne MFA für diesen Zweck erstellen.

Voraussetzungen für dieses Skript zu arbeiten, werden Sie die folgenden Powershell-Module installieren:

Sharepoint Online-Verwaltungsshell Die Sharepoint Online Management Shell verwendet Microsoft Onedrive Website die Berechtigungen für den Benutzer zu ändern Sammlungen.

herunterladen und installieren Sie es hier: https://www.microsoft.com/en-au/download/details.aspx?id=35588

Sharepoint PnP Powershell-Modul Das Sharepoint-PnP-Powershell-Modul die Cmdlets bietet wir die Dateien und Ordner übertragen zwischen Microsoft Onedrive Konten verwenden werden.

es zu installieren, ein Powershell-Fenster als Administrator öffnen und das folgende Cmdlet ausführen:

Install-Module SharePointPnPPowerShellOnline -Force 

MSOnline V1 Powershell-Modul Sie werden auch für dieses Skript das MSOnline V1 Powershell-Modul benötigen.

es zu installieren, öffnen Sie ein Powershell-Fenster als Administrator an und führen das folgende Cmdlet:

Install-Module MSOnline -Force 

Und das Skript selbst:

$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

Während dieser Link, um die Frage beantworten kann, Es ist besser, die wesentlichen Teile der Antwort hier einzubeziehen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/17960180) – derloopkat

Verwandte Themen