Usando PowerShell para monitorar um fluxo do Power Automate

Traduzido do original em espanhol. Ler em espanhol

Neste tutorial vamos aprender a monitorar o status de um fluxo no Power Automate usando PowerShell. Esse processo é útil se você precisa acompanhar a execução do fluxo e receber alertas quando certas condições ocorrerem.

iStock AI Generator

Conectar ao SharePoint Online

Para começar, é preciso conectar-se ao SharePoint Online usando a identidade gerenciada pelo sistema. Use o seguinte comando no PowerShell para estabelecer a conexão:

Connect-PnPOnline -url zerogap.sharepoint.com -ManagedIdentity

Definir os fluxos a monitorar

Em seguida, defina os fluxos do Power Automate que você quer monitorar. Para isso, crie um dicionário com o nome do fluxo e o respectivo ID.

$flows_to_monitor = @{Audit_Log_Handler = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}

Definir o destino do webhook de alerta

Defina a variável que contém o webhook para o qual os alertas serão enviados. Esse webhook pode ser a URL de um serviço como Teams, Slack etc.

$webhook = Get-AutomationVariable -Name "ExampleAlertWebhookVariable"

Obter as últimas execuções

Para cada fluxo, obtenha as últimas execuções usando o comando get-pnpflowrun.

     $flow_id_string=[String]$flow.Values
     write-output  $flow_id_string
     $monitor=get-pnpflowrun -Environment "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" -Flow $flow_id_string | select -First 10

Contar e alertar se houver trabalhos demais em execução

Verifique cada trabalho e, se o status for «Running», incremente o contador de alertas.

     foreach ($job in $monitor) {
         if ($job.Properties.Status -eq "Running") {
             $counter_alert++
         }
     }

Se houver mais de 5 trabalhos em execução ao mesmo tempo, um alerta é disparado.

     write-output $counter_alert
     if ($counter_alert -gt 5 ) {

Agir em caso de alerta

Defina o que fazer quando a condição de alerta for atendida. Por exemplo, enviar uma notificação pelo webhook com detalhes sobre o fluxo e o trabalho mais recente.

         $job_id=$monitor[0].id
         $flow_name=[String]$flow.keys
         $payload = @{"text" = "Flow Alert: at least 5 jobs are still running in the $flow_name flow. The last job execution is $job_id"}
         Invoke-RestMethod -uri $webhook -method Post -Body (convertto-json -InputObject $payload)
     }
}

Com este script PowerShell, você pode manter um monitoramento constante dos seus fluxos no Power Automate e ficar atento a qualquer comportamento incomum que possa exigir sua atenção.

Exemplo completo

# Connect using the system managed Identity
Connect-PnPOnline -url zerogap.sharepoint.com -ManagedIdentity

####  Flows to monitor ####
$flows_to_monitor = @{Audit_Log_Handler = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}
$counter_alert = 0

## Alert Webhook Target ##
$webhook = Get-AutomationVariable -Name "ExampleAlertWebhookVariable"

# Check last 10 jobs for all targeted flows
foreach ($flow in $flows_to_monitor) {

     # Get the last 10 runs
     $flow_id_string=[String]$flow.Values
     write-output  $flow_id_string
     $monitor=get-pnpflowrun -Environment "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" -Flow $flow_id_string | select -First 10

     foreach ($job in $monitor) {
         if ($job.Properties.Status -eq "Running") {
             $counter_alert++
         }
     }
     # If there are more than 5 jobs running at the same time. Alert.
     write-output $counter_alert
     if ($counter_alert -gt 5 ) {
         # Do something
         $job_id=$monitor[0].id
         $flow_name=[String]$flow.keys
         $payload = @{"text" = "Flow Alert: at least 5 jobs are still running in the $flow_name flow. The last job execution is $job_id"}
         Invoke-RestMethod -uri $webhook -method Post -Body (convertto-json -InputObject $payload)
     }
}

Maximiliano Díaz Doglia

AI Platform Engineer & Full-Stack Developer
Building Enterprise Integrations & Automations