请求协助:获取PowerBI租户内所有工作区及关联用户列表
解决PowerShell获取Power BI工作区及关联用户的问题
嘿,作为刚接触PowerShell和Power BI的新手,遇到这种问题太正常了!我来一步步帮你搞定这个需求:
首先,确认权限和模块准备
要获取整个组织的Power BI工作区和用户信息,你需要用拥有Power BI管理员角色的账号操作(普通用户只能看到自己有权限的工作区)。另外,先确保你安装了最新的Power BI管理模块:
# 安装模块(如果没装过) Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force # 导入模块 Import-Module MicrosoftPowerBIMgmt # 登录Power BI服务(用管理员账号) Connect-PowerBIServiceAccount
修正你的命令,解决Linq错误&获取用户信息
你之前的命令有两个关键问题:
-Include All不对,要明确指定Users才能拉取工作区的用户权限数据;- 直接导出嵌套的
Users属性会因为是集合对象,导致CSV显示Linq迭代器的错误,必须先把嵌套数据展开成扁平结构。
试试这个完整的脚本:
# 连接Power BI服务(如果还没登录) Connect-PowerBIServiceAccount # 获取组织内所有工作区,同时拉取用户信息 $allWorkspaces = Get-PowerBIWorkspace -Scope Organization -Include Users -All # 把工作区和用户的关联数据展开成CSV友好的扁平格式 $formattedOutput = $allWorkspaces | ForEach-Object { $currentWorkspace = $_ # 如果工作区有用户,为每个用户生成一条记录 if ($currentWorkspace.Users) { $currentWorkspace.Users | ForEach-Object { [PSCustomObject]@{ 工作区ID = $currentWorkspace.Id 工作区名称 = $currentWorkspace.Name 工作区类型 = $currentWorkspace.Type 用户邮箱 = $_.UserPrincipalName 用户权限 = $_.AccessRight 用户类型 = $_.PrincipalType # 比如User、Group等 } } } else { # 处理没有任何用户的空工作区 [PSCustomObject]@{ 工作区ID = $currentWorkspace.Id 工作区名称 = $currentWorkspace.Name 工作区类型 = $currentWorkspace.Type 用户邮箱 = $null 用户权限 = $null 用户类型 = $null } } } # 导出到CSV,指定UTF8编码避免乱码 $formattedOutput | Export-Csv -Path "C:\temp\PowerBI工作区及用户列表.csv" -NoTypeInformation -Encoding UTF8
为什么之前的方法失败?
- 论坛帖子的方法可能版本过时,Power BI模块的参数一直在更新;
- 直接用API的话需要处理身份验证和分页,对新手门槛高;
- 你原来的命令没指定
-Include Users,且没展开嵌套的用户对象,导致CSV输出的是对象引用而非实际数据,就出现了那个Linq错误。
额外注意事项
- 如果你运行时提示权限不足,检查你的账号是否真的是Power BI管理员(可以在Azure AD或Power BI admin portal里确认);
- 建议定期更新Power BI模块:
Update-Module -Name MicrosoftPowerBIMgmt,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者Dreale20




