You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell调用REST API单独部署Power BI报表或仪表板?

PowerShell调用Power BI REST API完成部署流水线操作示例

前置准备

  • 安装PowerShell模块MSAL.PS用于获取访问令牌:
Install-Module -Name MSAL.PS -Force -AllowClobber
  • 确保已注册Power BI服务主体应用,且授予Workspace.ReadWrite.All、Pipeline.ReadWrite.All权限

步骤1:获取Power BI访问令牌

替换变量值后执行:

$tenantId = "你的租户ID"
$clientId = "你的应用注册客户端ID"
$clientSecret = "你的应用注册客户端密钥"

# 获取访问令牌
$token = Get-MsalToken -ClientId $clientId -ClientSecret ($clientSecret | ConvertTo-SecureString -AsPlainText -Force) -TenantId $tenantId -Scopes "https://analysis.windows.net/powerbi/api/.default"
$authHeader = @{
    "Authorization" = "Bearer $($token.AccessToken)"
}

步骤2:获取目标部署流水线ID

假设流水线名称为Dev到SIT部署流水线,执行代码获取ID:

$pipelineName = "Dev到SIT部署流水线"
$pipelinesResponse = Invoke-RestMethod -Uri "https://api.powerbi.com/v1.0/myorg/pipelines" -Headers $authHeader -Method Get
$targetPipeline = $pipelinesResponse.value | Where-Object { $_.displayName -eq $pipelineName }
$pipelineId = $targetPipeline.id

if (-not $pipelineId) {
    Write-Error "未找到指定名称的部署流水线"
    exit 1
}

步骤3:获取源(Dev)和目标(SIT)阶段ID

部署流水线默认包含Dev、Test、Prod三个阶段,执行代码确认并获取对应ID:

$stagesResponse = Invoke-RestMethod -Uri "https://api.powerbi.com/v1.0/myorg/pipelines/$pipelineId/stages" -Headers $authHeader -Method Get
$sourceStageId = ($stagesResponse.value | Where-Object { $_.order -eq 0 }).id # Dev阶段通常为第0位
$targetStageId = ($stagesResponse.value | Where-Object { $_.order -eq 1 }).id # SIT阶段通常为第1位

if (-not $sourceStageId -or -not $targetStageId) {
    Write-Error "未找到源或目标阶段"
    exit 1
}

步骤4:获取要部署的报表/仪表板工件ID

获取Dev阶段下可部署的工件,这里以指定报表为例:

$artifactsResponse = Invoke-RestMethod -Uri "https://api.powerbi.com/v1.0/myorg/pipelines/$pipelineId/stages/$sourceStageId/artifacts" -Headers $authHeader -Method Get
# 替换为你的目标报表名称
$targetArtifact = $artifactsResponse.value | Where-Object { $_.displayName -eq "销售分析报表" -and $_.type -eq "Report" }
$artifactIds = @($targetArtifact.id)

if (-not $artifactIds) {
    Write-Error "未找到指定的可部署工件"
    exit 1
}

步骤5:触发部署作业

执行代码将指定工件从Dev部署到SIT:

$deployBody = @{
    sourceStageId = $sourceStageId
    targetStageId = $targetStageId
    artifactIds   = $artifactIds
} | ConvertTo-Json

$deployResponse = Invoke-RestMethod -Uri "https://api.powerbi.com/v1.0/myorg/pipelines/$pipelineId/deployments" -Headers $authHeader -Method Post -Body $deployBody -ContentType "application/json"

Write-Host "部署已触发,部署作业ID:$($deployResponse.id)"

可选:查询部署状态

确认部署结果可执行以下代码:

$deploymentId = $deployResponse.id
$statusResponse = Invoke-RestMethod -Uri "https://api.powerbi.com/v1.0/myorg/pipelines/$pipelineId/deployments/$deploymentId" -Headers $authHeader -Method Get
Write-Host "部署状态:$($statusResponse.status),状态信息:$($statusResponse.statusMessage)"

内容的提问来源于stack exchange,提问作者Joy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:07:46