如何通过应用注册或服务主体调用REST API获取Power Automate数据?
使用应用注册/服务主体通过REST API获取Power Automate数据
核心结论
完全可以通过应用注册(服务主体)结合Power Automate相关的REST API实现你的需求,替代手动PowerShell脚本的方式,实现持续化的数据获取。Power Automate的元数据存储在Dataverse中,所以主要调用的是Dataverse API和Power Platform管理API。
必要前提
- 已完成应用注册,且已添加对应的Dataverse应用权限(比如
Environment.Read.All、Flow.Read.All、App.Read.All等,根据你需要获取的资源范围选择),并完成管理员同意。 - 服务主体需要拥有目标Power Platform环境的相应访问权限(比如环境读者权限),确保能读取流、应用的元数据。
具体实现步骤
1. 获取服务主体的访问令牌
使用OAuth 2.0客户端凭证流获取访问令牌,请求示例:
POST https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials &client_id={你的应用客户端ID} &client_secret={你的应用客户端密钥} &scope=https://{环境域名}.crm.dynamics.com/.default
提示:
{环境域名}可在Power Platform admin中心的环境详情页找到,是目标Dataverse环境的唯一域名。
2. 调用REST API获取数据
获取所有环境
调用Power Platform管理API:
GET https://api.powerplatform.com/environments?api-version=2020-10-01 Authorization: Bearer {获取到的访问令牌}
获取单个/多个流
流对应的Dataverse实体是workflows,用以下请求:
- 获取所有Power Automate流:
GET https://{环境域名}.crm.dynamics.com/api/data/v9.2/workflows?$filter=category eq 0 Authorization: Bearer {获取到的访问令牌}
category eq 0用于筛选出Power Automate流(排除Dataverse原生工作流)
- 获取单个指定流:
GET https://{环境域名}.crm.dynamics.com/api/data/v9.2/workflows({流ID}) Authorization: Bearer {获取到的访问令牌}
获取单个/多个应用
画布应用对应的Dataverse实体是canvasapps,请求示例:
- 获取所有画布应用:
GET https://{环境域名}.crm.dynamics.com/api/data/v9.2/canvasapps Authorization: Bearer {获取到的访问令牌}
- 获取单个指定应用:
GET https://{环境域名}.crm.dynamics.com/api/data/v9.2/canvasapps({应用ID}) Authorization: Bearer {获取到的访问令牌}
持续化方案建议
- 将令牌获取、API调用逻辑封装成可复用的脚本或服务(比如Python、C#服务),设置定时任务或按需触发,替代手动执行PowerShell的方式。
- 注意访问令牌默认1小时过期,需要在代码中实现自动刷新机制,确保服务持续可用。
内容的提问来源于stack exchange,提问作者codeOverLoad
相关产品推荐
相关产品推荐

