当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何下载所有用户 OneDrive 文件

作者:精品下载站 日期:2024-12-14 01:57:09 浏览:15 分类:玩电脑

如何下载所有用户 OneDrive 文件


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

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

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

  1. 登录 Microsoft 365 管理中心
  2. 单击用户 > 活跃用户
  3. 找到用户并选择它

[玩转系统] 如何下载所有用户 OneDrive 文件

  1. OneDrive 上选择
  2. 点击创建文件链接

[玩转系统] 如何下载所有用户 OneDrive 文件

  1. 单击显示的链接可转到用户 OneDrive 文件

[玩转系统] 如何下载所有用户 OneDrive 文件

  1. 选择所有文件
  2. 点击下载

[玩转系统] 如何下载所有用户 OneDrive 文件

  1. 这些文件将压缩为 .zip 文件并下载到您的本地系统。

[玩转系统] 如何下载所有用户 OneDrive 文件

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

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

步骤 1. 安装 Microsoft Graph PowerShell

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

Install-Module Microsoft.Graph -Force
Install-Module Microsoft.Graph.Beta -AllowClobber -Force

重要提示:始终安装 Microsoft Graph PowerShellMicrosoft Graph Beta PowerShell 模块。这是因为某些 cmdlet 在最终版本中尚不可用,并且无法运行。在运行 cmdlet 或脚本之前将两个模块更新到最新版本,以防止出现错误和不正确的结果。

步骤 2. 准备 CSV 文件

转到 C:\Temp 文件夹并创建一个名为 OneDriveUsers.csv 的 CSV 文件。

[玩转系统] 如何下载所有用户 OneDrive 文件

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

[玩转系统] 如何下载所有用户 OneDrive 文件

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

下载 Get-OneDriveFiles.ps1 PowerShell 脚本并将其放置在 C:\Scripts 文件夹中。

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

另一种选择是将以下代码复制并粘贴到记事本中。将其命名为 Get-OneDriveFiles.ps1 并将其放置在 C:\Scripts 文件夹中。

<#
    .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.a-d.site/download-all-user-onedrive-files/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.a-d.site
    LinkedIn:   linkedin.com/in/a-d

    .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 脚本

运行以下命令以运行 Get-OneDriveFiles.ps1 PowerShell 脚本。

注意:确保您可以使用管理员帐户访问用户 OneDrive。否则,脚本无法下载文件,并且您会收到身份验证错误。

在此示例中,我们希望从 C:\temp\OneDriveUsers.csv 导入 CSV 路径,并将每个用户的 OneDrive 文件导出到 C:\temp\OneDriveData > 文件夹。

C:\scripts\.\Get-OneDriveFiles.ps1 -CsvPath "C:\temp\OneDriveUsers.csv" -ExportPath "C:\temp\OneDriveData"

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

[玩转系统] 如何下载所有用户 OneDrive 文件

就是这样!

了解更多:在 Microsoft 365 中导出 OneDrive 使用情况报告 »

结论

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

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

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯