Forum Discussion

pborah's avatar
pborah
Solution Sage
1 year ago
Solved

Get all reports within apps via Invoke-PowerBIRestMethod in powershell

I'm a workspace admin for all workspaces in our tenant and the owner of all our production apps. While we wait for our infrastructure team to authorize a service principal in AD to be able to make capacity admin level queries, I'm trying to extract data about our production apps and the reports contained within them.

 

I'm able to get apps and reports on their own but when I put things together inside a loop, things either go haywire or return nothing at all. Here's my script -

 

Connect-PowerBIServiceAccount
$path = "C:/Users/pborah/Documents/test.csv"
$apps = Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/apps" -Method Get

$Reports = 
ForEach ($app in $apps)
    {
    ForEach ($report in (Invoke-PowerBIRestMethod -Url "https://api.powerbi.com/v1.0/myorg/apps/$app.id/reports" -Method Get))
        {
        [pscustompbject]@{
            AppID = $app.id
            AppName = $app.name
            ReportID = $report.id
            ReportName = $report.name
            ReportURL = $report.webUrl
            }
        }
    }

$Reports | Export-Csv - Path $path -NoTypeInformation

 

I've tried a few different variations of this with the same results. In the first foreach loop, if I use $apps.value, code runs, but I get absolutely nothing. If I simply use $apps, I get aggregate exception and I'm not sure what's going wrong. I'm not the most advanced programmer. My primary role is that of a senior business analyst. Thank you.

  • You are using 

    Invoke-PowerBIRestMethod

    so you can use relative URLs

     

    $apps = Invoke-PowerBIRestMethod -Url "apps" -Method Get

     

    Apps don't have reports. Workspaces have reports. Do your loop across groups, not apps.

1 Reply

  • You are using 

    Invoke-PowerBIRestMethod

    so you can use relative URLs

     

    $apps = Invoke-PowerBIRestMethod -Url "apps" -Method Get

     

    Apps don't have reports. Workspaces have reports. Do your loop across groups, not apps.