Forum Discussion

WCJ's avatar
WCJ
New Member
1 year ago
Solved

Administration

Is it possible to get a list of all PowerBI reports published, to which workspace they are published to, who has permission to report?   We are moving reports to PowerBI and in time as quantity gro...
  • arvindsingh802's avatar
    1 year ago

    WCJ  - You will need use 3 APIs to get 
    1. Gets all workspaces

    2. Gets reports in each workspace - Loop for each worksapce above

    3.  Fetches direct report-level permissions - Loop for each report above
    If you have Power BI Admin access then can use below powershell script

    # Connect to Power BI Service

    Connect-PowerBIServiceAccount

    # Get all workspaces

    $workspaces = Get-PowerBIWorkspace -Scope Organization

    # Initialize an array to store report details

    $reportDetails = @()

    foreach ($workspace in $workspaces) {

        Write-Host "Processing Workspace: $($workspace.Name)"

        # Get reports in the workspace

        $reports = Get-PowerBIReport -WorkspaceId $workspace.Id

        foreach ($report in $reports) {

            Write-Host "Processing Report: $($report.Name)"

            # Get users with workspace-level permissions

            $workspacePermissions = Get-PowerBIWorkspaceUser -Id $workspace.Id

            foreach ($permission in $workspacePermissions) {

                $reportDetails += [PSCustomObject]@{

                    ReportName     = $report.Name

                    ReportId       = $report.Id

                    WorkspaceName  = $workspace.Name

                    WorkspaceId    = $workspace.Id

                    User           = $permission.DisplayName

                    UserEmail      = $permission.EmailAddress

                    AccessScope    = "Workspace Level"

                    AccessRight    = $permission.AccessRight

                }

            }

     

            # Get users with direct report-level permissions

            $reportPermissions = Get-PowerBIReportUser -WorkspaceId $workspace.Id -ReportId $report.Id

            foreach ($permission in $reportPermissions) {

                $reportDetails += [PSCustomObject]@{

                    ReportName     = $report.Name

                    ReportId       = $report.Id

                    WorkspaceName  = $workspace.Name

                    WorkspaceId    = $workspace.Id

                    User           = $permission.DisplayName

                    UserEmail      = $permission.EmailAddress

                    AccessScope    = "Report Level"

                    AccessRight    = $permission.AccessRight

                }

            }

        }

    }

    # Export results to CSV

    $reportDetails | Export-Csv -Path "PowerBI_Reports_Permissions.csv" -NoTypeInformation

    Write-Host "Report details exported to PowerBI_Reports_Permissions.csv"