如何通过Rest API和Azure服务主体获取Power Automate流的最后运行时间
用应用注册服务主体获取Power Automate流最后运行日期的可行方案
一、给应用注册分配必要权限
- 在Azure AD应用注册中,添加Power Platform类API权限:
Environment.Read.All:允许读取Power Platform环境信息Flow.Read.All:允许读取流的基础属性Flow.RunHistory.Read.All:允许读取流的运行历史记录
- 所有权限必须完成管理员同意授予,否则服务主体无法调用对应API接口
二、PowerShell实现步骤
1. 获取服务主体访问令牌
通过应用注册的clientId、clientSecret和tenantId调用Azure AD令牌端点,获取Power Automate API的访问令牌:
$tenantId = "你的租户ID" $clientId = "应用注册的Client ID" $clientSecret = "应用注册的Client Secret" $tokenUri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $body = @{ grant_type = "client_credentials" client_id = $clientId client_secret = $clientSecret scope = "https://api.powerautomate.com/.default" } $tokenResponse = Invoke-RestMethod -Uri $tokenUri -Method Post -Body $body $accessToken = $tokenResponse.access_token
2. 获取所有环境及流的基础信息
先调用API获取租户下的所有Power Platform环境,再遍历每个环境提取其中的流信息:
$headers = @{Authorization = "Bearer $accessToken"} $apiVersion = "2016-11-01" # 获取所有环境列表 $environments = Invoke-RestMethod -Uri "https://api.powerautomate.com/providers/Microsoft.ProcessSimple/environments?api-version=$apiVersion" -Headers $headers $flowList = @() foreach ($env in $environments.value) { $envId = $env.id.Split("/")[-1] # 获取当前环境下的所有流 $flows = Invoke-RestMethod -Uri "https://api.powerautomate.com/providers/Microsoft.ProcessSimple/environments/$envId/flows?api-version=$apiVersion" -Headers $headers foreach ($flow in $flows.value) { $flowInfo = [PSCustomObject]@{ FlowId = $flow.id.Split("/")[-1] FlowName = $flow.properties.displayName EnvironmentId = $envId LastRunTime = $null } $flowList += $flowInfo } }
3. 遍历流获取最后运行日期
对每个流调用运行历史API,按启动时间倒序取第一条记录,即为该流的最后运行时间:
foreach ($flow in $flowList) { try { $runHistoryUri = "https://api.powerautomate.com/providers/Microsoft.ProcessSimple/environments/$($flow.EnvironmentId)/flows/$($flow.FlowId)/runs?`$top=1&`$orderby=startTime desc&api-version=$apiVersion" $runHistory = Invoke-RestMethod -Uri $runHistoryUri -Headers $headers if ($runHistory.value.Count -gt 0) { $flow.LastRunTime = $runHistory.value[0].properties.startTime } else { $flow.LastRunTime = "从未运行" } } catch { $flow.LastRunTime = "获取失败: $($_.Exception.Message)" } } # 输出最终结果 $flowList | Select-Object FlowId, FlowName, EnvironmentId, LastRunTime
三、注意事项
- 若服务主体无管理员权限,需联系Azure AD管理员完成权限授予操作
- 需处理从未运行的流,避免空值报错
- API版本可根据需求调整,
2016-11-01为稳定兼容版本
内容的提问来源于stack exchange,提问作者codeOverLoad
相关产品推荐
相关产品推荐

