There are several ways to get an Inventory status of your Power Platform Environments. There is the Center of Excellence Starter Kit, you can build your own using the Admin connectors, or, you can use the PowerShell admin modules as I have done here.
Using the PowerShell admin modules for Power Platform I have written a PowerShell script to download data regarding Power Platform Environments, Power Apps Canvas Apps and Power Automate Flows. The downloaded data is saved as csv files.
In Excel, I have created a data model based on the downloaded data. This data model is then used to create the above Dashboard in the Excel workbook.
All that is required in order to update the Dashboard is run the PowerPlatformInventory.ps1 PowerShell script in an elevated session (you must have Administrative rights to install the required admin modules)
The script will ask you to log in twice, once for Power Platform and once for Azure AD (to get the user information as this is not yet available via the Flow Admin PowerShell Module)
The PowerPlatformInventory.ps1 PowerShell script:
Write-Host "Updating required PowerShell modules" Install-Module -Name Microsoft.PowerApps.Administration.PowerShell -AllowClobber -Force -ErrorAction Stop $AdminModuleVersion = Get-Module -Name Microsoft.PowerApps.Administration.PowerShell | select Version Write-Host "Microsoft.PowerApps.Administration.PowerShell is version" $AdminModuleVersion.Version -ForegroundColor Green Install-Module -Name Microsoft.PowerApps.PowerShell -AllowClobber -Force -ErrorAction Stop $PowerAppsModuleVersion = Get-Module -Name Microsoft.PowerApps.PowerShell | select Version Write-Host "Microsoft.PowerApps.PowerShell is version" $PowerAppsModuleVersion.Version -ForegroundColor Green Add-PowerAppsAccount Write-Host "Connected to Power Platform" -ForegroundColor Green Connect-AzureAD Write-Host "Connected to Azure AD" -ForegroundColor Green #Get Environment Inventory Write-Host "`n" Write-Host "Collecting Environment Inventory" $Array = @() ForEach($Environment in Get-PowerAppEnvironment) { $EnvironmentObject = New-Object PSObject -Property @{ Environment = $Environment.Displayname EnvironmentOwner = $Environment.CreatedBy EnvironmentCreatedTime = $Environment.CreatedTime Location = $Environment.Location IsDefault = $Environment.IsDefault } $Array += $EnvironmentObject } $Array | Export-Csv $PSScriptRoot\Data\Environments.csv Write-Host "Environment Inventory collection complete." $Array.Count "Environments collected"-ForegroundColor Green #Get Power Apps Inventory Write-Host "`n" Write-Host "Collecting Power Apps Inventory" $Array = @() ForEach($Environment in Get-PowerAppEnvironment) { ForEach($PowerApp in Get-AdminPowerApp -EnvironmentName $Environment.EnvironmentName){ $PowerAppObject = New-Object PSObject -Property @{ AppName = $PowerApp.AppName DisplayName = $PowerApp.DisplayName Environment = $Environment.Displayname EnvironmentCreatedTime = $Environment.CreatedTime Location = $Environment.Location IsDefault = $Environment.IsDefault Owner = $PowerApp.Owner.displayName OwnerEmail = $PowerApp.Owner.email OwnerUPN = $PowerApp.Owner.userPrincipalName } $Array += $PowerAppObject } } $Array | Export-Csv $PSScriptRoot\Data\PowerAppInventory.csv Write-Host "Power Apps Inventory collection complete." $Array.Count "Power Apps collected"-ForegroundColor Green #Get Power Automate Inventory Write-Host "`n" Write-Host "Collecting Power Automate Inventory" $Array = @() ForEach($Environment in Get-FlowEnvironment) { ForEach($Flow in Get-AdminFlow -EnvironmentName $Environment.EnvironmentName){ $UserObject = Get-AzureADUser -ObjectId $Flow.CreatedBy.objectId $FlowObject = New-Object PSObject -Property @{ AppName = $Flow.FlowName DisplayName = $Flow.DisplayName Environment = $Environment.Displayname EnvironmentCreatedTime = $Environment.CreatedTime Location = $Environment.Location IsDefault = $Environment.IsDefault Owner = $UserObject | select -ExpandProperty DisplayName OwnerEmail = $UserObject | select -ExpandProperty UserPrincipalName OwnerUPN = $UserObject | select -ExpandProperty UserPrincipalName } $Array += $FlowObject } } $Array | Export-Csv $PSScriptRoot\Data\FlowInventory.csv Write-Host "Power Automate Inventory collection complete." $Array.Count "Flows collected"-ForegroundColor Green Write-Host "`n"
The complete solution is available on github: https://github.com/jenschristianschroder/Power-Platform-Inventory-Excel-Book