2017-02-05 3 views

ответ

-1

Посмотрите на этот скрипт на TechNet. Он содержит некоторые ограничения, но он должен дать вам хорошую отправную точку.

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

Вот некоторые из необходимой информации со страницы:

Есть несколько вещей, которые нужно иметь в виду:

Это может занять некоторое время. Каждый файл или папка занимает не менее секунды или два для обработки. Если у вашего уходящего пользователя есть десятки тысяч файлов, а время не на вашей стороне, вы можете использовать другой метод .

Он использует ваше соединение. Загружает файлы перед загрузкой их в OneDrive другого пользователя. Если ваше соединение происходит медленно, и вы перемещаете большие файлы, вы можете оставить это на сервере облачного размещения .

Он не может перемещать файлы больше 250МБ Ограничение этого модуля PowerShell является то, что он не может отправить файлы больше 250МБ для SharePoint. Этот скрипт будет замечать эти файлы и экспортировать их в каталог c: \ temp \ largefiles.txt, если вы хотите переместить их вручную.

No Two Factor Authentication Этот скрипт не работает с многофакторной аутентификацией в учетной записи администратора. Вы можете хотеть, чтобы создал временную администрацию без MFA для этой цели.

Предпосылки Для этого сценария на работу, вам необходимо установить следующие модули в PowerShell:

Интернет Управление SharePoint Оболочка SharePoint Online Management Shell используется для изменения разрешения на OneDrive сайте пользователям коллекции.

Скачать и установить его здесь: https://www.microsoft.com/en-au/download/details.aspx?id=35588

Powershell Модуль SharePoint PnP Модуль SharePoint PnP Powershell предоставляет командлеты мы будем использовать для передачи файлов и папок между OneDrive счетов.

Чтобы установить его, откройте окно PowerShell, как администратор и запустите следующую команду:

Install-Module SharePointPnPPowerShellOnline -Force 

MSOnline V1 Powershell модуля Вы также будете нуждаться модуль PowerShell в MSOnline V1 для этого сценария.

Чтобы установить его, откройте окно PowerShell, как администратор и запустите следующую команду:

Install-Module MSOnline -Force 

И сам скрипт:

$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

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17960180) – derloopkat

Смежные вопросы