Код PowerShell для API-интерфейсов Power BI в Azure Automation Runbook

#api #automation #powerbi #runbook

#API #автоматизация #powerbi #runbook

Вопрос:

Мы успешно выполняем приведенный ниже код на сервере домена, используя обычный PowerShell. Однако, когда мы выполняем этот код PowerShell в Azure Automation Runbook, мы получаем сообщение «Приостановленное задание runbook было предпринято 3 раза, но каждый раз это не удавалось».

Мы не можем использовать участника-службу, поскольку вы не можете выполнить ни один из API-интерфейсов администратора из участника-службы. Итак, нам нужно использовать обычную учетную запись пользователя для входа в API Power BI.

Есть идеи, как заставить этот код работать в 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
  

Ответ №1:

Я рекомендую эту статью Герхарда Брюкля, в которой показано, как использовать метод Invoke-RestMethod для обхода командлетов Power BI. Это единственный способ, который я нашел, чтобы заставить Azure runbook работать. Он также предоставляет рабочий образец.

Ваш код будет выглядеть примерно так. Однако обратите внимание, что вам нужно будет создать регистрацию приложения Azure и использовать этот идентификатор клиента. Есть мастер для создания этого в 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"