批量执行失败的Power Automate 流程

概述

Power Automate 是一个云端的服务,它可以让我们很方便地定义流程,这些流程可以根据事件触发、手工运行、被程序调用、定时运行等,设计这种流程不需要编程能力,它内置了几百个连接器(connector)可以与各种系统做对接。关于Power Automate的基本用法,请参考 https://docs.microsoft.com/zh-cn/learn/powerplatform/power-automate

要解决的问题

今天这一篇文章给大家分享的是,当Power Automate的流程运行失败后,用脚本的方式批量将其重新运行。Power Automate 会保存每个流程运行的历史,不管成功还是失败。点击进去可以看到运行的详细过程。下面是我某个运行失败的流程案例。

运行失败总是有原因的,但Power Automate 运行我们进行重新运行。但通过图形化界面,一次性最多可以重新提交10个流程

所以,如果要批量重新运行所有运行失败的流程,我们可能需要用到一点脚本技巧。我找到一个方法是这样的。

解决方案

首先,安装 m365 命令行工具,你可以通过这里的介绍进行安装 https://pnp.github.io/cli-microsoft365/user-guide/installing-cli/

然后,用如下的脚本来完成这个操作吧

# 将当前窗口默认输出文本的编码设置为UTF8(这个不是必须的,但有些 PowerShell 版本会乱码
$OutputEncoding = [Console]::OutputEncoding = New-Object System.Text.Utf8Encoding

# 登录microsoft 365
m365 login

# 获取当前用户的默认环境(environment),因为一个用户可能会有多个environment,所以这里先取的第一个
$env = m365 flow environment list --query [*].name | ConvertFrom-Json | Select-Object -First 1

# 获取当前环境下的所有流程的编号和名称
$flows = m365 flow list --environment $env --query "[*].{id:name,name:displayName}" | ConvertFrom-Json

# 请确认你要查询的流程编号,例如下面是我的例子,它会返回一系列失败的运行记录编号

$flow = "0b93ac88-0e51-4f2b-9e58-efe8c0826877"

$failedrun = m365 flow run list --flow $flow --environment $env --query "[?status =='Failed'].name" | ConvertFrom-Json

# 循环提交所有的记录

$failedrun | ForEach-Object {m365 flow run resubmit --flow $flow --environment $env --name $_ --confirm }

这样就好了!

posted @ 2022-05-24 21:20  陈希章  阅读(966)  评论(0编辑  收藏  举报