【问题标题】:The Remote Server returned an error : (415) Unsupported media type for PowerBI Data Refresh API Call远程服务器返回错误:(415) PowerBI 数据刷新 API 调用不受支持的媒体类型
【发布时间】:2017-09-13 16:43:38
【问题描述】:

我正在尝试使用带有 PowerShell 脚本的 POST 方法刷新 power bi 数据集,但不断收到有关媒体类型的错误,因此不知道在此处做什么。只是好奇是否有人对此有任何解决方案。提前感谢您的帮助!

更多详情请查看此源代码...

https://github.com/Azure-Samples/powerbi-powershell/blob/master/manageRefresh.ps1

    # This sample script calls the Power BI API to progammtically trigger a refresh for the dataset
# It then calls the Power BI API to progammatically to get the refresh history for that dataset
# For full documentation on the REST APIs, see:
# https://msdn.microsoft.com/en-us/library/mt203551.aspx 

# Instructions:
# 1. Install PowerShell (https://msdn.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell) and the Azure PowerShell cmdlets (https://aka.ms/webpi-azps)
# 2. Set up a dataset for refresh in the Power BI service - make sure that the dataset can be 
# updated successfully
# 3. Fill in the parameters below
# 4. Run the PowerShell script

# Parameters - fill these in before running the script!
# =====================================================

# An easy way to get group and dataset ID is to go to dataset settings and click on the dataset
# that you'd like to refresh. Once you do, the URL in the address bar will show the group ID and 
# dataset ID, in the format: 
# app.powerbi.com/groups/{groupID}/settings/datasets/{datasetID} 

$groupID = " FILL ME IN " # the ID of the group that hosts the dataset. Use "me" if this is your My Workspace
$datasetID = " FILL ME IN " # the ID of the dataset that hosts the dataset

# AAD Client ID
# To get this, go to the following page and follow the steps to provision an app
# https://dev.powerbi.com/apps
# To get the sample to work, ensure that you have the following fields:
# App Type: Native app
# Redirect URL: urn:ietf:wg:oauth:2.0:oob
#  Level of access: all dataset APIs
$clientId = " FILL ME IN " 

# End Parameters =======================================

# Calls the Active Directory Authentication Library (ADAL) to authenticate against AAD
function GetAuthToken
{
       $adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

       $adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll"

       [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null

       [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null

       $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
}

# Get the auth token from AAD
$token = GetAuthToken

# Building Rest API header with authorization token
$authHeader = @{
   'Content-Type'='application/json'
   'Authorization'=$token.CreateAuthorizationHeader()
}

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

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

# Check the refresh history
$uri = "https://api.powerbi.com/v1.0/$groupsPath/datasets/$datasetID/refreshes"
Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET -Verbose

【问题讨论】:

  • 你能用你遇到这个问题的代码更新问题吗?
  • @Persistent13 刚刚更新..
  • 根据我在API reference 中看到的此 URL 的请求应该是 GET 而不是 POST。如果你改变它,它会起作用吗?
  • @Persistent13 我正在使用数据集刷新操作...请查看此链接 msdn.microsoft.com/en-us/library/mt784652.aspx 了解更多详细信息。我需要先发出 post 请求来刷新数据集,然后使用 get 请求获取最后更新的时间戳。

标签: rest api powershell powerbi


【解决方案1】:

我遇到了这个确切的问题。

您基本上是在尝试从无法刷新的数据集(例如直接查询数据集或内置指标数据集)中返回刷新信息

您需要添加-ErrorAction SilentlyContinue

或将数据集刷新 API 调用包装在一个循环中,如下所示:

$datasets = Invoke-RestMethod -Uri $uri -Headers $authHeader -Method GET

foreach($dataset in $datasets.value)
{
    if($dataset.isRefreshable -eq $true)
    {
        #Build API String
        $uri2 = "https://api.powerbi.com/v1.0/$groupsPath/datasets/$($dataset.id)/refreshes"
        #Return refresh info for each dataset
        $refreshes = Invoke-RestMethod -Uri $uri2 -Headers $authHeader -Method GET
    }
}

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2021-04-27
    • 2016-11-26
    • 1970-01-01
    • 2018-10-13
    • 2018-07-25
    相关资源
    最近更新 更多