如何使用 PowerBI API 或 Azure 门户提取所有 PowerBI 用户和工作区访问权限?

Raj*_*Raj 0 portal azure powerbi

Power BI 新手。尝试获取有权访问每个仪表板的用户的报告。任何指示都会有帮助。

提前致谢!

She*_*ets 5

下面是我创建的脚本。首先更改 PowerBI 凭据的用户名和密码。该脚本收集结果,然后打开两个 Out Grid 窗口(工作区和工作区用户)。然后,您可以将网格结果复制/粘贴到 Excel 中。这不会导出共享报告和仪表板。

\n

我安装了两个 PBI powershell 模块。我认为该脚本仅使用 MicrosoftPowerBIMgmt。

\n

检查您是否有 PBI 模块。

\n
get-module -ListAvailable | where {$_.Name -like '*BI*'}\n
Run Code Online (Sandbox Code Playgroud)\n

并检查可用的 cmdlet。

\n
get-command -module MicrosoftPowerBIMgmt.Admin | sort CommandType, name\nget-command -module MicrosoftPowerBIMgmt.Capacities | sort CommandType, name\nget-command -module MicrosoftPowerBIMgmt.Data | sort CommandType, name\nget-command -module MicrosoftPowerBIMgmt.Profile | sort CommandType, name\nget-command -module MicrosoftPowerBIMgmt.Reports | sort CommandType, name\nget-command -module MicrosoftPowerBIMgmt.Workspaces | sort CommandType, name\nget-command -module PowerBIPS | sort CommandType, name\n
Run Code Online (Sandbox Code Playgroud)\n

PBI 工作空间和权限

\n
#****************\n#------------------------------------------------------\n# --> PBI WORKSPACES & PERMISSIONS\n#\n# Export PBI results to grid for copy/paste to Excel table\n# * All groups (Active/Deleted)\n# * All workspaces (Active)\n# * All workspace permissions\n#\n# RestAPI call for each workspace (Group Users) \n# * https://learn.microsoft.com/en-us/rest/api/power-bi/groups/getgroupusers\n#\n#------------------------------------------------------ \n\n\n#****************\n#------------------------------------------------------\n# --> PBI Connection\n#------------------------------------------------------ \nWrite-Host " PBI credentials ..." -ForegroundColor Yellow -BackgroundColor DarkGreen\n\n## PBI credentials \n\n$password = "myPassword" | ConvertTo-SecureString -asPlainText -Force\n$username = "myemail@domain.com" \n$credential = New-Object System.Management.Automation.PSCredential($username, $password)\n\n## PBI connect \n\nConnect-PowerBIServiceAccount -Credential $credential\n\n# Login-PowerBI\n\n\n#****************\n#------------------------------------------------------\n# --> Workspace info \n# \n# * Get-PowerBIWorkspace > "WARNING: Defaulted to show top 100 workspaces. Use -First & -Skip or -All to retrieve more results."\n# * Grid exported for workspaces\n#------------------------------------------------------ \nWrite-Host " Workspace info ..." -ForegroundColor Yellow -BackgroundColor DarkGreen\n    \n## List all groups, Select ID desired for Variables section \n## PBIWorkspace properties values are NULL if Scope is not set to Organization \n# Get-PowerBIWorkspace -Scope Organization -Filter "tolower(name) eq 'BI Team POC - DEV'" \n\n# SET\n$Groups = Get-PowerBIWorkspace -Scope Organization -All | SORT @{Expression="Type"; Descending=$True}, Name\n\n$Groups_deleted = $Groups | SELECT Id, Name, Type, State | WHERE State -EQ 'Deleted'\n$Groups = $Groups | SELECT Id, Name, Type, State | WHERE State -NE 'Deleted'\n$GroupWorkspaces = $Groups | WHERE Type -eq 'Workspace' \n\n# PRINT\n$Groups_deleted | Select Id, Name, Type, State | ft \xe2\x80\x93auto \n$Groups | Select Id, Name, Type, State | ft \xe2\x80\x93auto \n$GroupWorkspaces | Select Id, Name, Type | ft \xe2\x80\x93auto \nGet-PowerBIWorkspace -Scope Organization -Name "BI Team Sandbox" | Select Id, Name, Type | ft \xe2\x80\x93auto \n\n# OUT GRID\n$GroupsWorkspaces | Select Id, Name, Type | Out-GridView \n$Groups | Select Id, Name, Type | Out-GridView\n$Groups_deleted | Select Id, Name, Type, State | Out-GridView\n\n\n#------------------------------------------------------ \n## LOOP FOLDERS ##################\n# * RestAPI call for each workspace (Group Users) \n# * Grid exported for workspace user access\n#------------------------------------------------------ \n\n# Clear variable before loop to reseat array data collector \nclear-variable -name WorkspaceUsers\n\nWrite-Host " Looping ..." -ForegroundColor Yellow -BackgroundColor DarkGreen\n\nforeach ($GroupWorkspaceId in $GroupWorkspaces.Id) {\n\n    $WorkspaceObject = Get-PowerBIWorkspace -Scope Organization -Id $GroupWorkspaceId\n    $pbiURL = "https://api.powerbi.com/v1.0/myorg/groups/$GroupWorkspaceId/users"\n    $WorkspaceObject | Select Id, Name, Type | ft \xe2\x80\x93auto \n\n    Write-Host ($WorkspaceObject.Name +" | "+ $WorkspaceObject.Type)  -ForegroundColor White -BackgroundColor Blue\n    Write-Host $GroupWorkspaceId -ForegroundColor White -BackgroundColor Blue\n    Write-Host $pbiURL -ForegroundColor White -BackgroundColor Blue\n\n\n#****************\n#------------------------------------------------------\n# --> 1. API Call for WORKSPACE USERS  \n#------------------------------------------------------ \n    Write-Host " API Call ..." -ForegroundColor Yellow -BackgroundColor DarkGreen\n     \n    ## API call\n    $resultJson = Invoke-PowerBIRestMethod \xe2\x80\x93Url $pbiURL \xe2\x80\x93Method GET \n    $resultObject = ConvertFrom-Json -InputObject $resultJson \n\n    ## Collect data fields for each loop\n    $WorkspaceUsers += $resultObject.Value | \n    SELECT @{n='WorkspaceId';e={$GroupWorkspaceId}}, \n            @{n='Workspace';e={$WorkspaceObject.Name}}, \n            displayName, \n            emailAddress, \n            @{n='UserRole';e={$_.groupUserAccessRight}}, \n            @{n='Principle';e={$_.principalType}} |\n        SELECT Workspace, displayName, UserRole, Principle, emailAddress | \n        SORT UserRole, displayName \n    \n    ## Print loop results\n    $WorkspaceUsers | ft -auto | Where{$_.WorkspaceId -eq $GroupWorkspaceId} \n\n    clear-variable -name resultJson\n    clear-variable -name resultObject\n\n}\n## END LOOP  ##################\n#------------------------------------------------------ \n\n## Export user access for all workspaces\n    $WorkspaceUsers | SORT Workspace, UserRole, displayName | Out-GridView \n
Run Code Online (Sandbox Code Playgroud)\n