You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SharePoint嵌套文件夹完整复制到Azure ADLS?已试PowerAutomate/ADF未果

可行解决方案:SharePoint嵌套文件夹到ADLS的完整复制

方案1:修正Azure Data Factory (ADF) 配置实现递归复制

  • 核心设置:启用递归与保留目录结构

    1. 在ADF中新建复制活动,源选择SharePoint Online数据集,目标配置为ADLS Gen2数据集
    2. 源数据集配置:
      • 指定目标Site URL和文档库,在文件路径中填入父文件夹的完整路径(例如/sites/YourSite/Shared Documents/ParentFolder)
      • 手动开启递归选项(默认关闭,需勾选),确保遍历所有子文件夹
      • 无需额外筛选规则即可复制全部内容,若需过滤可在文件筛选器中设置
    3. 目标数据集配置:
      • 指定ADLS容器和目标根路径(例如container/TargetParentFolder)
      • 开启保留分层结构选项,保证嵌套文件夹的层级关系完整保留
    4. 运行管道:触发后ADF会自动遍历所有子目录,完整复制文件与文件夹结构
  • 常见问题排查

    • 检查权限:确保ADF使用的服务主体对SharePoint父文件夹及所有子文件夹拥有读取权限,同时对ADLS目标容器拥有写入权限
    • 路径验证:确认SharePoint和ADLS的路径配置无拼写错误,避免因路径无效导致复制失败

方案2:使用PowerShell脚本批量复制(适合一次性/定时执行)

通过PnP PowerShell访问SharePoint,结合Azure存储模块实现递归复制:

# 安装依赖模块(首次运行)
Install-Module -Name PnP.PowerShell -Force
Install-Module -Name Az.Storage -Force

# 配置参数
$siteUrl = "https://yourtenant.sharepoint.com/sites/YourSite"
$spFolderPath = "Shared Documents/ParentFolder"
$adlsAccountName = "youradlsaccount"
$adlsContainer = "yourcontainer"
$adlsTargetPath = "TargetParentFolder/"

# 连接SharePoint
Connect-PnPOnline -Url $siteUrl -Interactive

# 获取所有文件(含嵌套子文件夹)
$files = Get-PnPFolderItem -FolderSiteRelativeUrl $spFolderPath -Recursive -ItemType File

# 连接ADLS存储账户
$ctx = New-AzStorageContext -StorageAccountName $adlsAccountName -UseConnectedAccount

# 循环复制文件
foreach ($file in $files) {
    # 计算文件相对路径(保持目录结构)
    $relativePath = $file.ServerRelativeUrl.Replace($spFolderPath, "")
    $adlsFilePath = $adlsTargetPath + $relativePath.TrimStart('/')

    # 临时下载SharePoint文件
    $tempPath = [System.IO.Path]::GetTempFileName()
    Get-PnPFile -Url $file.ServerRelativeUrl -Path $tempPath -AsFile -Force

    # 上传至ADLS
    Set-AzStorageBlobContent -Context $ctx -Container $adlsContainer -File $tempPath -Blob $adlsFilePath -Force

    # 清理临时文件
    Remove-Item $tempPath -Force
}

执行前需确保已登录Azure和SharePoint权限,脚本会自动递归遍历所有文件并保留原目录结构。

方案3:修正Power Automate的递归逻辑

若需继续使用Power Automate,需调整流程实现嵌套遍历:

  1. 创建手动触发或定时触发的流程
  2. 添加获取文件夹元数据动作,指定SharePoint父文件夹并开启包括嵌套项选项
  3. 添加应用到每一个循环,遍历返回的所有项目
  4. 在循环内添加条件判断:
    • 若当前项目为文件夹:递归调用当前流程(需开启流程的允许递归调用设置)
    • 若当前项目为文件:使用复制文件动作,手动拼接ADLS目标路径以保持原文件夹结构
  • 注意:Power Automate有运行时长限制,若文件数量极大,建议拆分执行或使用ADF/PowerShell方案

内容的提问来源于stack exchange,提问作者Sri Charan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:25:09