В настоящее время я разрабатываю сценарий для автоматического обновления одного из моих наборов данных Power BI с использованием REST API Power BI.Этот скрипт представляет собой файл .ps1, вызванный из моего кода Python, как вы можете видеть ниже.Я шаг за шагом следовал из этого учебного пособия, в то время как мой refresh.ps1 файл был разработан из этого официального источника MS. Были лишь некоторые незначительные адаптации кзаставить его работать, поэтому, если кто-то захочет его протестировать, я предлагаю использовать код, который я публикую в конце этого вопроса.
Однако, помимо того, что оба кода работают хорошо, я позволяю мне обновить свой набор данных, каждый раз, когда они запускаются, я должен вручную входить в свою учетную запись Azure с помощью графического интерфейса пользователя .Это делает этот скрипт бесполезным для автоматизации задач, как в моем случае.См. Изображение графического интерфейса ниже:
Я сделал какой-то ресурс, но не смог найти ни одного подобного случая, в котором также использовался 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