1

我们使用常规 PowerShell 在域服务器上成功执行了以下代码。但是,当我们在 Azure 自动化 Runbook 中执行此 PowerShell 代码时,我们会收到一条消息“已暂停 Runbook 作业已尝试 3 次,但每次都失败。

我们无法使用服务主体,因为您无法从服务主体执行任何管理 API。因此,我们需要使用普通用户帐户登录 Power BI API。

任何想法如何让此代码在 Runbook 中工作?

$UserName = 'user01@sample.com'
$User_Password = 'xx@#xsrasda!@W12'
$User_Password_Secure = ConvertTo-SecureString -AsPlainText $User_Password -Force

$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, 

Connect-PowerBIServiceAccount  -Credential $Credential
    if($SuppressErrors -eq $false) 
    {
        Resolve-PowerBIError -Last
    }

Invoke-PowerBIRestMethod -Method Get -Url 'admin/reports'

Disconnect-PowerBIServiceAccount
4

1 回答 1

0

我推荐Gerhard Brueckl 的这篇文章,他展示了如何使用 Invoke-RestMethod 绕过 Power BI cmdlet。这是我发现让 Azure Runbook 工作的唯一方法。他还提供了一个工作样本

您的代码将与此类似。但请注意,您将需要创建一个 Azure 应用注册并使用该客户端 ID。在https://dev.powerbi.com/apps有一个创建向导。

       $body = @{    
            "resource" = "https://analysis.windows.net/powerbi/api";
            "client_id" = $clientId;
            "grant_type" = "password";
            "username" = $UserName ;
            "password" = $User_Password;
            "scope" = "openid"
        }
        $resp = Invoke-RestMethod -Uri $authUrl -Method POST -Body $body
        
         $authHeaders =   @{
            "Content-Type" = "application/json";
            "Authorization" = $authResponse.token_type + " " + $authResponse.access_token
        } 

            Invoke-RestMethod -Method Get -Headers $authHeaders "https://api.powerbi.com/v1.0/myorg/admin/reports"

于 2020-12-18T15:42:27.107 回答