如何将SharePoint嵌套文件夹完整复制到Azure ADLS?已试PowerAutomate/ADF未果
方案1:修正Azure Data Factory (ADF) 配置实现递归复制
核心设置:启用递归与保留目录结构
- 在ADF中新建复制活动,源选择SharePoint Online数据集,目标配置为ADLS Gen2数据集
- 源数据集配置:
- 指定目标Site URL和文档库,在文件路径中填入父文件夹的完整路径(例如
/sites/YourSite/Shared Documents/ParentFolder) - 手动开启递归选项(默认关闭,需勾选),确保遍历所有子文件夹
- 无需额外筛选规则即可复制全部内容,若需过滤可在文件筛选器中设置
- 指定目标Site URL和文档库,在文件路径中填入父文件夹的完整路径(例如
- 目标数据集配置:
- 指定ADLS容器和目标根路径(例如
container/TargetParentFolder) - 开启保留分层结构选项,保证嵌套文件夹的层级关系完整保留
- 指定ADLS容器和目标根路径(例如
- 运行管道:触发后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,需调整流程实现嵌套遍历:
- 创建手动触发或定时触发的流程
- 添加获取文件夹元数据动作,指定SharePoint父文件夹并开启包括嵌套项选项
- 添加应用到每一个循环,遍历返回的所有项目
- 在循环内添加条件判断:
- 若当前项目为文件夹:递归调用当前流程(需开启流程的允许递归调用设置)
- 若当前项目为文件:使用复制文件动作,手动拼接ADLS目标路径以保持原文件夹结构
- 注意:Power Automate有运行时长限制,若文件数量极大,建议拆分执行或使用ADF/PowerShell方案
内容的提问来源于stack exchange,提问作者Sri Charan
相关产品推荐
相关产品推荐

