Usare PowerShell per monitorare un flusso di Power Automate

Tradotto dall'originale in spagnolo. Leggi in spagnolo

In questo tutorial impareremo a monitorare lo stato di un flusso in Power Automate usando PowerShell. È utile se devi tenere traccia delle esecuzioni del flusso e ricevere avvisi quando si verificano certe condizioni.

iStock AI Generator

Collegarsi a SharePoint Online

Per iniziare devi collegarti a SharePoint Online usando l’identità gestita assegnata dal sistema. Usa il seguente comando PowerShell per stabilire la connessione:

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

Definire i flussi da monitorare

Poi definisci i flussi di Power Automate che vuoi monitorare. Per farlo, crea un dizionario con il nome di ogni flusso e il relativo ID.

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

Impostare la destinazione del webhook di avviso

Imposta la variabile che contiene il webhook a cui verranno inviati gli avvisi. Può essere l’URL di un servizio come Teams, Slack, ecc.

$webhook = Get-AutomationVariable -Name "ExampleAlertWebhookVariable"

Ottenere le ultime esecuzioni

Per ogni flusso, ottieni le ultime esecuzioni con il 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

Contare e avvisare se ci sono troppi job in esecuzione

Controlla ogni job e, se lo stato è «Running», incrementa il contatore degli avvisi.

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

Se più di 5 job sono in esecuzione contemporaneamente, scatta un avviso.

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

Intervenire in caso di avviso

Definisci cosa fare quando la condizione di avviso è soddisfatta, per esempio inviare una notifica tramite il webhook con i dettagli del flusso e del job più 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)
     }
}

Con questo script PowerShell puoi tenere costantemente sotto controllo i tuoi flussi di Power Automate ed essere avvisato di qualsiasi comportamento insolito che richieda la tua attenzione.

Esempio 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