如何下载所有用户 OneDrive 文件

Jacki

任务是保存用户 OneDrive 文件的本地副本。我们可以使用 Microsoft 365 管理中心或 PowerShell 保存 OneDrive 文件。但是,如果您有很多用户,PowerShell 速度更快。在本文中,您将了解如何使用 PowerShell 从用户下载所有 OneDrive 文件。

在 Microsoft 365 管理中心下载用户 OneDrive 文件

要使用 Microsoft 365 管理中心下载用户 OneDrive 文件,请按照以下步骤操作:

  1. 登录到Microsoft 365 管理中心
  2. 点击用户 > 活跃用户
  3. 找到用户并选择它
  1. 选择上云端硬盘
  2. 点击创建文件链接

笔记:如果您看到未为此用户设置 OneDrive 的消息,请要求该用户登录 OneDrive 或为 Microsoft 365 中的用户预配置 OneDrive。如果您不执行此操作,则用户没有 OneDrive,并且您无法继续操作。

笔记:单击“创建文件链接”后,它将通过将您当前登录的管理员帐户添加到用户 OneDrive for Business 站点来自动分配权限。阅读文章中的更多内容将网站集管理员添加到 Microsoft 365 中的 OneDrive

  1. 单击显示的链接可转到用户 OneDrive 文件
  1. 选择所有文件
  2. 点击下载
  1. 这些文件将压缩为 .zip 文件并下载到您的本地系统。

使用 PowerShell 脚本下载用户 OneDrive 文件

要使用 PowerShell 脚本下载用户 OneDrive 文件,请按照以下步骤操作:

步骤 1. 安装 Microsoft Graph PowerShell

以管理员身份运行 Windows PowerShell 并安装 Microsoft Graph PowerShell。

Install-Module Microsoft.Graph -Force

重要的:在运行 cmdlet 或脚本之前,请务必更新到最新的 Microsoft Graph PowerShell 模块版本,以防止出现错误和不正确的结果。

步骤 2. 准备 CSV 文件

前往C:温度文件夹并创建一个名为 CSV 文件OneDriveUsers.csv

填写标题用户主体名称并添加用户主体名称您要从中下载 OneDrive 文件的位置。

步骤 3. 下载 Get-OneDriveFiles PowerShell 脚本

下载 Get-OneDriveFiles.ps1 PowerShell 脚本并将其放入C:脚本文件夹。

确保文件未被阻止,以防止运行脚本时出现错误。请阅读文章运行 PowerShell 脚本时出现未数字签名错误来了解更多信息。

参见:如何向其他用户授予 OneDrive 访问权限

另一种选择是将以下代码复制并粘贴到记事本中。给它起个名字获取 OneDriveFiles.ps1并将其放置在C:脚本文件夹。

<#
    .SYNOPSIS
    Get-OneDriveFiles.ps1

    .DESCRIPTION
    The script imports users from a specified CSV file and downloads all
    OneDrive files for each user to a specified local folder.

    .LINK
    www.alitajran.com/download-all-user-onedrive-files/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 11/22/2024 - Initial version
#>

# Parameters for CSV file input and export directory
param (
    [Parameter(Mandatory = $true)]
    [string]$CsvPath,
    [Parameter(Mandatory = $true)]
    [string]$ExportPath
)

# Connect to Microsoft Graph with necessary permissions
Connect-MgGraph -Scopes "Directory.Read.All", "Sites.Read.All", "Files.Read.All" -NoWelcome

# Import users from CSV file
$users = Import-Csv -Path $CsvPath

# Local folder path for OneDrive files export
$Folder = $ExportPath

function Get-DriveItems {
    param (
        [string]$DriveId,
        [string]$DriveItemId,
        [string]$LocalPath
    )

    # Ensure the local path exists
    New-Item -ItemType Directory -Path $LocalPath -Force | Out-Null

    # Fetch children of the current drive item
    $driveItemChildren = Get-MgDriveItemChild -DriveId $DriveId -DriveItemId $DriveItemId

    foreach ($item in $driveItemChildren) {
        if ($item.File.MimeType) {
            # It's a file
            $fileName = $item.Name
            $filePath = Join-Path -Path $LocalPath -ChildPath $fileName
            # Download the file
            Get-MgDriveItemContent -DriveId $DriveId -DriveItemId $item.id -OutFile $filePath
            Write-Host "Downloaded file: $filePath" -ForegroundColor Green
        }
        elseif ($item.Folder) {
            # It's a folder
            $newLocalPath = Join-Path -Path $LocalPath -ChildPath $item.Name
            Write-Host "Entering folder: $newLocalPath" -ForegroundColor Cyan
            Get-DriveItems -DriveId $DriveId -DriveItemId $item.id -LocalPath $newLocalPath
        }
    }
}

foreach ($user in $users) {
    $userPrincipalName = $user.UserPrincipalName

    # Fetch user information
    $userObject = Get-MgUser -Filter "userPrincipalName eq '$userPrincipalName'"
    if (-not $userObject) {
        Write-Host "User not found: $($userPrincipalName)" -ForegroundColor Yellow
        continue
    }

    # Fetch user's OneDrive drives
    $userOneDrive = Get-MgUserDefaultDrive -UserId $userObject.id -ErrorAction SilentlyContinue
    if ($userOneDrive) {
        $driveId = $userOneDrive.id

        # Create a directory for the user's data
        $userDirectory = "$Folder$userPrincipalName"
        New-Item -ItemType Directory -Path $userDirectory -Force | Out-Null

        # Start downloading from the root
        Get-DriveItems -DriveId $driveId -DriveItemId "root" -LocalPath $userDirectory
    }
    else {
        Write-Host "Error accessing OneDrive for user: $($userPrincipalName). Skipping." -ForegroundColor Red
    }
}

# Final message to indicate completion
Write-Host "All operations completed successfully. Files exported to $ExportPath." -ForegroundColor Cyan

步骤 4. 运行 Get-OneDriveFiles PowerShell 脚本

运行以下命令来运行获取 OneDriveFiles.ps1PowerShell 脚本。

笔记:您必须要求用户登录 OneDrive 或为 Microsoft 365 中的用户预配置 OneDrive。如果您不执行此操作,则用户没有 OneDrive,并且您无法继续操作。

笔记:确保您可以使用管理员帐户访问用户 OneDrive。否则,脚本无法下载文件,并且您会收到身份验证错误。阅读文章中的更多内容将网站集管理员添加到 Microsoft 365 中的 OneDrive

在此示例中,我们要从以下位置导入 CSV 路径:C:tempOneDriveUsers.csv并将每个用户的 OneDrive 文件导出到C:tempOneDriveData文件夹。

C:scripts.Get-OneDriveFiles.ps1 -CsvPath "C:tempOneDriveUsers.csv" -ExportPath "C:tempOneDriveData"

这是 Get-OneDriveFiles.ps1 PowerShell 脚本完成后的样子。

就是这样!

结论

您了解了如何下载所有用户 OneDrive 文件。如果你想为单个用户或几个用户下载,使用 Microsoft 365 管理中心是非常好的选择。但是,如果有很多用户,最好自动化您的工作并使用 Get-OneDriveFiles.ps1 PowerShell 脚本。

您喜欢这篇文章吗?您可能还喜欢在 Microsoft 365 中硬删除邮箱而不删除用户帐户。不要忘记关注我们并分享这篇文章。