如何在ADF中获取存储账户文件共享元数据并配置跨账户复制活动
跨订阅存储账户文件共享批量复制实现+错误排查
一、完整操作步骤
1. 用Get Metadata拉取所有文件共享
- 源Linked Service选Azure文件存储,跨订阅优先用服务主体,给它加源存储账户的
Storage File Data SMB Share Contributor权限;用账户密钥的话,确保密钥没过期、输入正确。 - Get Metadata活动里,字段列表一定要勾选
Child items,对应的数据集只选存储账户,别填具体共享路径——留空才能拉取全量共享列表。
2. 用For Each遍历共享列表
- 添加For Each活动,把项设置为
@activity('你的Get Metadata活动名称').output.childItems,怕并发过高出问题就开启Sequential(顺序执行)。 - 每个循环内放置Copy Data活动,动态绑定源和目标的共享名称。
3. 动态配置Copy Data的路径
- 源数据集的文件路径填
@item().name,直接对应遍历到的共享名;目标数据集也填同样内容,这样目标会自动创建同名共享,把所有内容原样复制过去。
二、BadRequest错误排查
你遇到的这个空内容BadRequest,基本是Linked Service或数据集配置出错,按以下顺序排查:
- 先检查Linked Service的身份验证:服务主体的租户ID、客户端ID、密钥有没有输错,权限是否给足;用账户密钥的话,再核对一遍是不是最新有效密钥。
- 检查Get Metadata的数据集:绝对不能填写具体共享路径,必须只选择存储账户,不然拉取不到全量共享,直接触发错误。
- 查看Copy Data的源配置:动态路径
@item().name有没有拼写错误,For Each的项是否正确绑定了Get Metadata的输出结果。 - 最后检查存储账户防火墙:如果开启了防火墙,得把ADF的IP地址或虚拟网络加进允许访问列表,否则无法连接存储。
三、注意事项
- 跨订阅场景下,服务主体需要在两个订阅的存储账户都配置对应权限,别漏了任意一边。
- 若文件共享数量较多,可调整For Each的并发数(默认20),避免触发存储账户的限流机制。
- 先测试单个共享的复制流程没问题,再执行批量操作,减少无效调试。
内容的提问来源于stack exchange,提问作者Vaishnavi Vaishu
相关产品推荐
相关产品推荐

