You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:52:41