Jak przenieść pliki OneDrive do innego użytkownika za pomocą PowerShell

Jak przenieść pliki OneDrive do innego użytkownika za pomocą PowerShell

Przesyłanie plików z konta Microsoft OneDrive do innego użytkownika jest łatwe w tym sensie, że możesz pobrać zawartość z OneDrive, a następnie ręcznie przesłać je na inne konto. W tym poście pokażemy, jak przenieść pliki OneDrive do innego użytkownika za pomocą PowerShell .

Rzeczy do rozważenia

Jeśli chodzi o przesyłanie plików z OneDrive na inne konto, jest to zadanie, które zajmie trochę czasu, ponieważ w tej chwili nie jest możliwe przesyłanie plików większych niż 250 MB. Dobrą wiadomością jest to, że PowerShell zanotuje wszystkie pliki, których nie może przesłać, więc możesz je wyszukać i udostępnić za pomocą zwykłej metody.

Przed przesłaniem plików na inne konto OneDrive pliki zostaną najpierw pobrane na Twój komputer, więc zanim przejdziesz dalej, upewnij się, że masz wystarczająco dużo miejsca na dysku twardym lub dysku SSD. A ponieważ wymagane jest połączenie internetowe, ogólna prędkość transferu będzie zależała od jakości sieci.

Teraz musimy zauważyć, że uwierzytelnianie dwuskładnikowe nie istnieje na koncie administratora, więc utwórz tymczasowe konto administratora, które nie ma 2FA tylko do tego celu.

Rzeczy, których będziesz potrzebować

Użyjemy specjalnego skryptu, aby przenieść pliki z jednego konta OneDrive na drugie. Aby skrypt działał z problemami, zainstaluj teraz następujące moduły PowerShell:

Moduł programu SharePoint PnP PowerShell

Otwórz narzędzie PowerShell jako administrator, a następnie uruchom następujące polecenie:

Install-Module SharePointPnPPowerShellOnline -Force

Powłoka zarządzania SharePoint Online

Celem tego narzędzia jest modyfikacja uprawnień na koncie OneDrive użytkowników.

Pobierz i zainstaluj bezpłatnie z witryny microsoft.com .

Moduł MSOnline V1 Powershell

Aby zainstalować ostatni moduł, uruchom następujące polecenie w PowerShell jako administrator:

Install-Module MSOnline -Force

Jak przenieść pliki OneDrive na inne konto

Aby przenieść pliki z konta OneDrive na inne, musisz otworzyć PowerShell, a następnie uruchomić dostarczony skrypt.

Otwórz PowerShell

Wyszukiwanie Microsoft PowerShell

Otwórz Visual Studio Code lub PowerShell.

Możesz to zrobić, klikając przycisk Szukaj, a następnie wyszukaj PowerShell.

Stamtąd kliknij prawym przyciskiem myszy aplikację, a następnie wybierz opcję przeznaczoną do otwierania narzędzia w trybie administratora.

Uruchom skrypt

Skrypt OneDrive PowerShell

Następnie musisz uruchomić odpowiedni skrypt. Znajdziesz go na dole artykułu.

Zdecydowaliśmy się na to, ponieważ scenariusz jest dość długi.

Po dodaniu skryptu naciśnij klawisz Enter na klawiaturze.

Przenieś pliki

Wreszcie nadszedł czas, aby przenieść pliki na inne konto OneDrive.

Widzisz, zaraz po naciśnięciu klawisza Enter zostaniesz poproszony o dodanie konta e-mail Nazwa użytkownika odchodzącego użytkownika .

Będziesz także potrzebować Nazwa użytkownika użytkownika docelowego . Jest to użytkownik usługi OneDrive, do którego pliki zostaną skopiowane i przesłane.

Na koniec zostaniesz poproszony o dodanie nazwy użytkownika administratora usługi Office 365 .

Poczekaj, aż skrypt wykona swoje zadanie, zanim sprawdzisz konto odbiorcze, aby zobaczyć, czy pliki zostały przesłane poprawnie.

Skopiuj i wklej poniższy skrypt:

$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

Skrypt można znaleźć na tej stronie Reddit .

Czy PowerShell może uzyskać dostęp do OneDrive?

SharePoint Online PowerShell umożliwi użytkownikom łączenie się z innym kontem OneDrive za pomocą narzędzia PowerShell. Poprosi Cię o wpisanie hasła, aby PowerShell mógł rozpocząć pracę na Twoich kontach OneDrive za pomocą poleceń cmdlet.

Czy użytkownicy zewnętrzni mogą uzyskiwać dostęp do usługi OneDrive?

Użytkownicy zewnętrzni mogą uzyskiwać dostęp do Twojego konta OneDrive, ale tylko wtedy, gdy na to zezwolisz. Użytkownicy mogą mieć dostęp do Twoich plików na zawsze lub na określony czas. Możesz także ograniczyć ich możliwości.

Jak skopiować pliki z OneDrive innej osoby?

Masz następujące opcje, jeśli chcesz skopiować pliki z usługi OneDrive innej osoby:

  • Otwórz OneDrive w przeglądarce za pomocą linku, wybierz pliki, które chcesz skopiować i kliknij Pobierz. Spowoduje to pobranie go na komputer.
  • Otwórz konto OneDrive za pomocą łącza, wybierz pliki, które chcesz skopiować, i kliknij Kopiuj do.

Otóż ​​to!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *