PowerBI运维:如何用PowerShell导出含WorkspaceID和DatasetID的报表列表?
PowerBI工作区与对应报表、数据集的关联导出方案
我需要完成一项管理员任务,记录每个工作区中的所有报表和数据集。目前已能单独获取工作区、报表、数据集列表,但无法将这些数据关联,尤其是没法导出包含对应WorkspaceID的报表列表,寻求解决方法。
已实现的单独获取脚本:
1. 获取所有工作区
Get-PowerBIWorkspace -Scope Organization -All | ConvertTo-Json | Out-File c:\PowerBIWorkspaces.json
2. 获取所有报表(无关联WorkspaceID)
$timestamp = (Get-Date).ToString("yyyy-MM-dd_HHmmss") $namefolder = "C:\filepath\Admin\" $namefile = "workspace_reports_meta" + "_" + $timestamp $extension = ".json" $filenamestring = $namefolder + $namefile + $extension Get-PowerBIReport -Scope Organization | ConvertTo-Json | Out-File $filenamestring
3. 获取所有数据集(无关联WorkspaceID)
$timestamp = (Get-Date).ToString("yyyy-MM-dd_HHmmss") $namefolder = "C:\filepath\Admin\" $namefile = "workspace_datasets_meta" + "_" + $timestamp $extension = ".json" $filenamestring = $namefolder + $namefile + $extension Get-PowerBIDataset -Scope Organization | ConvertTo-Json | Out-File $filenamestring
关联导出解决方案
核心思路是遍历每个工作区,在工作区上下文内获取对应的报表和数据集,自动带上WorkspaceID关联信息。
完整脚本
# 配置输出路径和时间戳 $timestamp = (Get-Date).ToString("yyyy-MM-dd_HHmmss") $outputFolder = "C:\filepath\Admin\" $outputFile = $outputFolder + "PowerBI_Workspace_Assets_" + $timestamp + ".json" # 创建空数组存储最终结果 $workspaceAssets = @() # 获取所有组织级工作区 $workspaces = Get-PowerBIWorkspace -Scope Organization -All # 遍历每个工作区 foreach ($workspace in $workspaces) { Write-Host "Processing workspace: $($workspace.Name) (ID: $($workspace.Id))" # 获取当前工作区下的所有报表,添加工作区关联字段 $reports = Get-PowerBIReport -WorkspaceId $workspace.Id -Scope Organization | Select-Object Id, Name, DatasetId, @{Name="WorkspaceId"; Expression={$workspace.Id}}, @{Name="WorkspaceName"; Expression={$workspace.Name}} # 获取当前工作区下的所有数据集,添加工作区关联字段 $datasets = Get-PowerBIDataset -WorkspaceId $workspace.Id -Scope Organization | Select-Object Id, Name, IsRefreshable, RefreshSchedule, @{Name="WorkspaceId"; Expression={$workspace.Id}}, @{Name="WorkspaceName"; Expression={$workspace.Name}} # 组装工作区资产信息 $workspaceData = [PSCustomObject]@{ WorkspaceId = $workspace.Id WorkspaceName = $workspace.Name WorkspaceType = $workspace.Type Reports = $reports Datasets = $datasets } # 添加到最终结果数组 $workspaceAssets += $workspaceData } # 导出为JSON文件,设置深度避免嵌套对象截断 $workspaceAssets | ConvertTo-Json -Depth 10 | Out-File $outputFile Write-Host "Export completed! File saved to: $outputFile"
脚本说明
- 遍历关联:通过循环逐个处理工作区,确保报表和数据集直接绑定所属工作区的ID与名称。
- 自定义字段:用
Select-Object的计算属性,给报表和数据集手动添加WorkspaceId、WorkspaceName,便于后续查询分析。 - 深度控制:
ConvertTo-Json添加-Depth 10参数,避免PowerBI嵌套对象被截断。 - 进度跟踪:输出当前处理的工作区名称,方便监控执行状态。
内容的提问来源于stack exchange,提问作者PBI DataVizzle
相关产品推荐
相关产品推荐

