我正在尝试通过混合使用PowerShell和PowerBI REST API将Power BI报表和数据集从一个工作区部署到另一个工作区。在新的工作区中,我正在更新数据集参数以指向新的数据库名称。
数据集指向Azure SQL数据库,并且在我的DEV工作区(克隆的源)中,数据集将访问用户的凭据传递到数据库。
我正在使用我创建的服务主体进行身份验证,然后以管理员身份添加到数据集中。
这是我为此编写的PowerShell代码:
$config = gc .\EnvConfig.json -raw | ConvertFrom-Json
$envSettings = $config.Dev
$toEnvSettings = $config.QA
# Convert to SecureString
[securestring]$secStringPassword = ConvertTo-SecureString $config.ServicePrincipalSecret -AsPlainText -Force
$userId = "$($config.ServicePrincipalId)@$($config.ServicePrincipalTenant)"
[pscredential]$credObject = New-Object System.Management.Automation.PSCredential ($userId, $secStringPassword)
Connect-PowerBIServiceAccount -Tenant $config.ServicePrincipalTenantName -ServicePrincipal -Credential $credObject
Get-PowerBIReport -WorkspaceId $envSettings.PBIWorkspaceId | ForEach-Object {
$filename ="c:\temp\$($_.Name).pbix"
Remove-Item $filename
Invoke-PowerBIRestMethod -Method GET `
-Url "https://api.powerbi.com/v1.0/myorg/groups/$($envSettings.PBIWorkspaceId)/reports/$($_.Id)/Export" `
-ContentType "application/zip" -OutFile $filename
New-PowerBIReport -WorkspaceId $toEnvSettings.PBIWorkspaceId -ConflictAction CreateOrOverwrite -Path $filename
}
$datasets = Get-PowerBIDataset -WorkspaceId $toEnvSettings.PBIWorkspaceId
$datasetId = $datasets[0].Id
$updateDBParam = "{`"updateDetails`": [ { `"name`": `"DBName`", `"newValue`": `"$($toEnvSettings.DBName)`" }]}"
$updateUri = "https://api.powerbi.com/v1.0/myorg/groups/$($toEnvSettings.PBIWorkspaceId)/datasets/$datasetId/Default.UpdateParameters"
Invoke-PowerBIRestMethod -Method POST -Url $updateUri -Body $updateDBParam
克隆了报表和数据集后,在新工作区中打开报表时,我看到一个错误,即数据集没有凭据:
如果我使用我的个人登录信息来接管此数据集,则将加载报告。这还不够,我想设置凭据以编程方式通过用户的ID。
我在PowerBI网站上发现了this discussion,他们说您可以使用数据集中的数据集ID和网关ID,并将PATCH请求发送到https://api.powerbi.com/v1.0/myorg/gateways/[gateway id] / datasources / [datasource id ]
我怀疑这仅与“我的工作区”数据集有关,而与工作区中的数据集无关。
当我尝试使用通过对https://api.powerbi.com/v1.0/myorg/groups/[workspace id] / datasets / [dataset id] / datasources执行GET获取的网关和数据源ID发送该补丁请求时,出现401错误。我尝试使用自己的PowerBI Tenant Admin登录名以及通过PowerBI应用程序注册工具创建的Admin应用程序进行发布,并且还在AAD门户中为我的服务主体添加了租户级PowerBI读/写权限。什么都没用,我一直收到401。
两个问题:
答案 0 :(得分:0)
解决了问题。
401错误源于我自己发布的凭据,而不是源于我没有发布权限。我正在使用OAuth凭据方法,并且传递的令牌无效。 PowerBI API的响应只是一个简单的401错误,没有告诉用户问题在于该API验证了OAuth令牌并且失败了。
我使用无效的基本证书进行了测试,在这种情况下,您会收到400错误的请求错误,这更有意义。