PowerShell 経由で OneDrive ファイルを別のユーザーに転送する方法
Microsoft OneDrive アカウントから別のユーザーへのファイルの転送は、OneDrive からコンテンツをダウンロードして、手動で他のアカウントにアップロードできるという意味で簡単です。この投稿では、 PowerShell を介して OneDrive ファイルを別のユーザーに転送する方法を説明します。
考慮すべき事項
OneDrive から別のアカウントにファイルをアップロードすることになると、現時点では 250 MB を超えるファイルをアップロードすることができないため、しばらく時間がかかる作業になります。幸いなことに、PowerShell はアップロードできないすべてのファイルをメモするため、それらのファイルを探して通常の方法で共有できます。
ファイルを他の OneDrive アカウントにアップロードする前に、ファイルはまずコンピューターにダウンロードされるため、先に進む前にハード ドライブまたは SSD に十分な空き領域があることを確認してください。また、インターネット接続が必要なため、全体的な転送速度はネットワークの品質によって異なります。
ここで、管理者アカウントには 2 要素認証が存在しないことに注意する必要があるため、この目的専用に 2FA を持たない一時的な管理者アカウントを作成します。
必要なもの
特別なスクリプトを使用して、ある OneDrive アカウントから別の OneDrive アカウントにファイルを移動します。したがって、スクリプトが問題なく動作するようにするには、今すぐ次の PowerShell モジュールをインストールしてください。
SharePoint PnP PowerShell モジュール
管理者として PowerShell ツールを開き、次のコマンドを実行します。
Install-Module SharePointPnPPowerShellOnline -Force
SharePoint Online 管理シェル
このツールの目的は、ユーザーの OneDrive アカウントのアクセス許可を変更することです。
Microsoft.comから無料でダウンロードしてインストールします。
MSOnline V1 Powershell モジュール
この最後のモジュールをインストールするには、管理者として PowerShell で次のコマンドを実行してください。
Install-Module MSOnline -Force
OneDrive ファイルを別のアカウントに転送する方法
OneDrive アカウントから別のアカウントにファイルを転送するには、PowerShell を開いて、提供されたスクリプトを実行する必要があります。
PowerShellを開く
Visual Studio Code または PowerShell を開きます。
これを行うには、[検索] ボタンをクリックして PowerShell を検索します。
そこから、アプリを右クリックし、ツールを管理者モードで開くように設計されたオプションを選択します。
スクリプトを実行する
次に、関連するスクリプトを実行する必要があります。記事の下部にあります。
スクリプトが非常に長いため、これを選択しました。
スクリプトを追加した後、キーボードの Enter キーを押します。
ファイルを転送する
最後に、ファイルを別の OneDrive アカウントに転送します。
Enter キーを押した直後に、電子メール アカウントを追加するように求められます。離脱するユーザーのユーザー名。
宛先ユーザーのユーザー名も必要になります。これは、ファイルのコピー先および転送先となる OneDrive ユーザーです。
最後に、 Office 365 管理者のユーザー名を追加するよう求められます。
受信アカウントをチェックしてファイルが正しく転送されたかどうかを確認する前に、スクリプトが正常に動作するのを待ってください。
以下のスクリプトをコピーして貼り付けます。
$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
スクリプトはこのReddit ページにあります。
PowerShell は OneDrive にアクセスできますか?
SharePoint Online PowerShell を使用すると、ユーザーは PowerShell ツールを使用して別の OneDrive アカウントに接続できるようになります。PowerShell がコマンドレットを使用して OneDrive アカウントでの作業を開始するために、パスワードを入力するように求められます。
外部ユーザーも OneDrive にアクセスできますか?
外部ユーザーは OneDrive アカウントにアクセスできますが、これは許可されている場合に限ります。ユーザーはファイルに永久に、または一定期間アクセスできます。できることを制限することもできます。
他の人の OneDrive からファイルをコピーするにはどうすればよいですか?
他の人の OneDrive からファイルをコピーしたい場合は、次のオプションがあります。
- リンクを使用してブラウザーで OneDrive を開き、コピーするファイルを選択して、[ダウンロード] をクリックします。これにより、コンピュータにダウンロードされます。
- リンクを使用して OneDrive アカウントを開き、コピーするファイルを選択して、[コピー先] をクリックします。
それでおしまい!
コメントを残す