Автоматический вход в Azure Powershell для обновления Power BI - PullRequest
0 голосов
/ 19 декабря 2018

В настоящее время я разрабатываю сценарий для автоматического обновления одного из моих наборов данных Power BI с использованием REST API Power BI.Этот скрипт представляет собой файл .ps1, вызванный из моего кода Python, как вы можете видеть ниже.Я шаг за шагом следовал из этого учебного пособия, в то время как мой refresh.ps1 файл был разработан из этого официального источника MS. Были лишь некоторые незначительные адаптации кзаставить его работать, поэтому, если кто-то захочет его протестировать, я предлагаю использовать код, который я публикую в конце этого вопроса.

Однако, помимо того, что оба кода работают хорошо, я позволяю мне обновить свой набор данных, каждый раз, когда они запускаются, я должен вручную входить в свою учетную запись Azure с помощью графического интерфейса пользователя .Это делает этот скрипт бесполезным для автоматизации задач, как в моем случае.См. Изображение графического интерфейса ниже:

enter image description here

Я сделал какой-то ресурс, но не смог найти ни одного подобного случая, в котором также использовался Python,О Powershell я читал об использовании ADAL, но не смог понять, что такое ADAL.

Пока что мой скрипт на Python выглядит так:

import subprocess, sys

def powershell(file):

    p = subprocess.Popen(["powershell.exe", file], stdout=sys.stdout)
    p.communicate()

MS.powershell(r"'C:\blablabla\refresh.ps1'")

Хотя мой файл refresh.ps1 содержитсодержание показано ниже:

$groupID = "MY_GROUP_ID"
$datasetID = "MY_DATASET_ID"
$clientId = "MY_CLIENT_ID"

function GetAuthToken

{
       if(-not (Get-Module AzureRm.Profile)) {
         Import-Module AzureRm.Profile
       }

       $redirectUri = "urn:ietf:wg:oauth:2.0:oob"

       $resourceAppIdURI = "https://analysis.windows.net/powerbi/api"

       $authority = "https://login.microsoftonline.com/common/oauth2/authorize";

       $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority

       $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId, $redirectUri, "Auto")

       return $authResult
}

$token = GetAuthToken

$authHeader = @{
   'Content-Type'='application/json'
   'Authorization'=$token.CreateAuthorizationHeader()
}

$groupsPath = ""
if ($groupID -eq "me") {
    $groupsPath = "myorg"
} else {
    $groupsPath = "myorg/groups/$groupID"
}

$uri = "https://api.powerbi.com/v1.0/$groupsPath/datasets/$datasetID/refreshes"
Invoke-RestMethod -Uri $uri -Headers $authHeader -Method POST -Verbose

1 Ответ

0 голосов
/ 19 декабря 2018

Если вы хотите выполнить аутентификацию без вывода сообщений, вы можете использовать класс UserCredentials и передать имя пользователя и пароль в метод AcquireToken.Ваша функция GetAuthToken должна выглядеть примерно так:

function GetAuthToken
{
       # Change these
       $username = "chuck@norris.com"
       $password = ConvertTo-SecureString "myP@ssw0rd" –asplaintext –force

       if(-not (Get-Module AzureRm.Profile)) {
         Import-Module AzureRm.Profile
       }

       $resourceAppIdURI = "https://analysis.windows.net/powerbi/api"
       $authority = "https://login.microsoftonline.com/common/oauth2/authorize";
       $credentials = New-Object System.Management.Automation.PSCredential $Username,$password
       $AADcredential = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential" -ArgumentList $credentials.UserName,$credentials.Password
       $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority

       $authResult = $authContext.AcquireToken($resourceAppIdURI,$clientId,$AADcredential)

       return $authResult
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...