如何从SharePoint组内的AD安全组获取邮箱地址用于工作流
核心问题说明
你的SharePoint组由AD组嵌套填充,直接读取SharePoint组成员只能拿到AD组对象,无法获取组内具体用户,所以需要先展开嵌套结构,提取所有实际用户的邮箱。
推荐方案:用Microsoft Graph API HTTP请求获取所有用户(高效直接)
无需自行编写递归逻辑,Graph API可直接返回组的所有传递成员(含嵌套AD组内的用户),步骤如下:
获取目标SharePoint组的ID
- 打开SharePoint站点组设置页面,从URL中提取组ID(如URL末尾的`MembershipGroupIdPm summ珍惜模式副本 implicitgenorg提供Early 有效地中最后的数字);
- 或在Power Automate中用「获取组」动作,通过组名直接获取ID。
添加HTTP请求动作调用Graph API
- 动作选「HTTP」,方法设为
GET; - URI填写:
https://graph.microsoft.com/v1.0/groups/{你的SharePoint组ID}/transitiveMembers/microsoft.graph.user?$select=mailtransitiveMembers:获取全嵌套层级的成员;microsoft.graph.user:仅返回用户对象,排除嵌套的其他组;$select=mail:只提取邮箱字段,精简返回数据。
- 身份验证选「Azure AD OAuth」,填写租户ID,受众设为
https://graph.microsoft.com,权限选择Group.Read.All。
- 动作选「HTTP」,方法设为
提取邮箱列表
- 用「选择」动作,从HTTP请求返回的
body/value中提取mail字段,得到所有用户邮箱的数组。
- 用「选择」动作,从HTTP请求返回的
发送邮件
- 在「发送电子邮件」动作中,将提取到的邮箱数组作为收件人;若动作要求分号分隔的字符串,可通过「join」动作把数组转为
邮箱1;邮箱2;...格式。
- 在「发送电子邮件」动作中,将提取到的邮箱数组作为收件人;若动作要求分号分隔的字符串,可通过「join」动作把数组转为
备选方案:用Power Automate自带动作递归展开组(无Graph API权限时用)
若无法使用Graph API,可通过递归逻辑处理嵌套组:
- 先用「列出组成员」动作获取SharePoint组的直接成员;
- 遍历每个成员,判断类型:若是用户则提取邮箱,若是组则继续调用「列出组成员」动作获取该组成员,直到所有嵌套组展开;
- 需设置递归终止条件,避免无限循环。
关键注意点
- 无论哪种方案,都要确保工作流拥有足够权限:读取SharePoint组、读取AD组/用户信息、发送邮件;
- 使用Graph API时,需确认租户已开启相关权限,且Power Automate的连接配置了正确的OAuth权限。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

