Se rendre au contenu

Script d'inventaire de flux Power Automate

6 juillet 2025 par
Script d'inventaire de flux Power Automate
HOFF Steven
| Aucun commentaire pour l'instant

Inventaire des flux Power Automate avec SharePoint, connecteurs et propriétaires

Si vous gérez plusieurs environnements Microsoft Power Platform au sein de votre organisation, obtenir une vue claire de vos flux Power Automate peut être un défi.
Qui en est le propriétaire? Quels connecteurs sont utilisés? Est-ce que certains flux sont liés à des listes ou bibliothèques SharePoint?

Ce script PowerShell vous aide à générer un inventaire complet des flux dans tous les environnements, en incluant :

  • L'ID de l'environnement (environment ID)
  • Le nom du Flux
  • Le propriétaire de chaque flux
  • Le type de ligne d’élément :
    • Connecteur utilisé par le flux
    • Ressource associée à ce connecteur
  • Les connecteurs utilisés (comme SharePoint, Outlook, etc.)
  • Les ressources référencées selon le connecteur : sites SharePoint, listes et identifiants de fichiers (le cas échéant).
    Le script génère autant de lignes supplémentaires que de données disponibles.
  • L’état du flux (activé/désactivé)
  • La date de création de chaque flux

Le résultat est exporté dans un fichier CSV dont le nom inclut un horodatage, pour faciliter le suivi et l’archivage.

Inventory CSV File

Fonctionnement du script

1. Vérification des modules

Le script commence par vérifier la présence des modules PowerShell nécessaires :

  • Microsoft.PowerApps.Administration.PowerShell
  • Microsoft.Graph.Users

S'ils sont absents, il les installe automatiquement.

2. Connexion interactive

L’utilisateur est invité à se connecter à:

  • Power Platform Admin Center (Add-PowerAppsAccount)
  • Microsoft Graph API (Connect-MgGraph with User.Read.All scope)

3. Extraction des flux

Le script récupère tous les flux avec Get-AdminFlow, puis les parcourt un par un. Pour chaque flux:

  • Récupère le nom de l’environnement, la date de création et l’état du flux (activé/désactivé)
  • Il essaie de résoudre le nom complet de l’utilisateur à partir de l’ID utilisé, en interrogeant Microsoft Graph.
    Si l’utilisateur n’est pas trouvé, la valeur est définie sur « Utilisateur inconnu ».
  • Il extrait les connecteurs utilisés.
  • Il recherche les ressources SharePoint référencées, en conservant uniquement les valeurs uniques et en filtrant les valeurs de remplacement comme [DYNAMIC_VALUE].

4. Suivi de la progression

Pendant l’exécution, le script affiche un pourcentage en temps réel pour suivre l’avancement de l’export.

PowerShell Script Progress

5. Export CSV

Tous les résultats sont exportés dans un fichier CSV nommé par exemple FlowInventory_YYYY-MM-DD.csv dans le répertoire courant.

Le script

Ci-dessous se trouve le script PowerShell complet que vous pouvez utiliser ou adapter selon vos besoins : ​

# Check and install required modules if missing
$requiredModules = @(
    "Microsoft.PowerApps.Administration.PowerShell",
    "Microsoft.Graph.Users"
)

foreach ($module in $requiredModules) {
    if (-not (Get-Module -ListAvailable -Name $module)) {
        Write-Host "Installing required module: $module" -ForegroundColor Yellow
        Install-Module -Name $module -Scope CurrentUser -Force -AllowClobber
    }
}

Import-Module Microsoft.PowerApps.Administration.PowerShell
Import-Module Microsoft.Graph.Users

# Login
Write-Host "Connecting to Power Platform..." -ForegroundColor Cyan
Add-PowerAppsAccount

Write-Host "Connecting to Microsoft Graph..." -ForegroundColor Cyan
Connect-MgGraph -Scopes "User.Read.All"

$Results = @()
$Flows = Get-AdminFlow
$totalFlows = $Flows.Count
$flowIndex = 0

foreach ($Flow in $Flows) {
    $flowIndex++
    $progressPercent = [math]::Round(($flowIndex / $totalFlows) * 100)
    Write-Host "Processing flow $flowIndex / $totalFlows ($progressPercent%) - $($Flow.DisplayName)" -ForegroundColor DarkGray

    $EnvironmentId = $Flow.EnvironmentName
    $FlowName = $Flow.DisplayName
    $CreatedOn = $Flow.CreatedTime
    $Status = if ($Flow.Enabled -eq $true) { "Enabled" } else { "Disabled" }

    try {
        $FlowInfo = Get-AdminFlow -FlowName $Flow.FlowName -EnvironmentName $EnvironmentId
    } catch {
        Write-Host "Failed to retrieve flow details: $FlowName" -ForegroundColor Red
        continue
    }

    try {
        $user = Get-MgUser -UserId $FlowInfo.CreatedBy.objectId -ErrorAction Stop
        $FlowOwner = $user.DisplayName
    } catch {
        $FlowOwner = "Unknown User"
    }

    $ConnectorDisplayNames = $FlowInfo.Internal.properties.connectionReferences.PSOBJECT.Properties.value.displayname
    foreach ($dspname in $ConnectorDisplayNames) {
        $Results += [pscustomobject]@{
            EnvironmentId = $EnvironmentId
            FlowName      = $FlowName
            Type          = "Connector"
            Owner         = $FlowOwner
            Scope         = "Connector"
            Details       = $dspname
            CreatedOn     = $CreatedOn
            Status        = $Status
        }
    }

    $ConnectorResourceList = $FlowInfo.Internal.properties.referencedResources.resource

    foreach ($resource in $ConnectorResourceList) {
        if ($resource.site) {
            $Results += [pscustomobject]@{
                EnvironmentId = $EnvironmentId
                FlowName      = $FlowName
                Type          = "Resource"
                Owner         = $FlowOwner
                Scope         = "site"
                Details       = $resource.site
                CreatedOn     = $CreatedOn
                Status        = $Status
            }
        }
        if ($resource.list) {
            $Results += [pscustomobject]@{
                EnvironmentId = $EnvironmentId
                FlowName      = $FlowName
                Type          = "Resource"
                Owner         = $FlowOwner
                Scope         = "list"
                Details       = $resource.list
                CreatedOn     = $CreatedOn
                Status        = $Status
            }
        }
        if ($resource.fileid) {
            $Results += [pscustomobject]@{
                EnvironmentId = $EnvironmentId
                FlowName      = $FlowName
                Type          = "Resource"
                Owner         = $FlowOwner
                Scope         = "id"
                Details       = $resource.fileid
                CreatedOn     = $CreatedOn
                Status        = $Status
            }
        }
    }
}

# Export with date-stamped filename
$DateStamp = Get-Date -Format "yyyy-MM-dd"
$ExportPath = ".\FlowInventory_$DateStamp.csv"
$Results | Export-Csv -Path $ExportPath -NoTypeInformation -Encoding UTF8BOM -Delimiter ";"

Write-Host "Export completed: $ExportPath" -ForegroundColor Green

Prochaines étapes

Vous pouvez maintenant importer ce fichier CSV dans Excel ou Power BI pour :

  • Suivre les flux inutilisés ou orphelins
  • Identifier les flux qui utilisent des connecteurs obsolètes
  • Auditer les dépendances SharePoint
  • Regrouper les flux par propriétaire ou par environnement ​

Script d'inventaire de flux Power Automate
HOFF Steven 6 juillet 2025
Partager cet article
ARCHIVE
Se connecter pour laisser un commentaire.