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.
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.
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