Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
7 years ago

Power Shell Invoke-PowerBIRestMethod -Method Post failing

Hi, 

I'm trying to create script that will refresh some datasets through Power BI API. I have registered App in Active Directory and gave it almost every permissions possible for Power BI Service (only missing ones are "Read and write all content in tenant" and "View all content in tenant"). I am the owner of the refreshed dataset and admin of Data Gateway it accesses.

 

If I put in my script cmdlet:

$urlrefresh = "groups/$groupID/datasets/$datasetID/refreshes"

Invoke-PowerBIRestMethod -Url $urlrefresh  –Method GET

everything is working and script will retrieve list of refreshes, but if I'm trying to do the same with -Method POST, script fails on some kind of write error.

  

I'm assuming it must be some kind of permissions problem, but like I said, App is already having almost all of them.

 

Error message:

Invoke-PowerBIRestMethod : One or more errors occurred.
At line:2 char:1
+ Invoke-PowerBIRestMethod -Url $urlrefresh -Method Post –Verbose
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.Power...werBIRestMethod:InvokePowerBIRestMethod) [Invoke-PowerBIRestMethod], AggregateException
+ FullyQualifiedErrorId : One or more errors occurred.,Microsoft.PowerBI.Commands.Profile.InvokePowerBIRestMethod

10 Replies

  • Hi there

    My understanding is that in order for the API to refresh it actually has to write data back into the dataset.

    And that would appear as to why it is failing. I would suggest adding the permissions for read and write and see if the script then works.
    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Gilbert,

       

      thanks for your reply. App is registered in AD with all permissions possible. Is there something different (perhaps on tetant level) that can override them?

       

      • GilbertQ's avatar
        GilbertQ
        Super User

        Hi there

         

        I would suggest making sure at the top where it says"Application Permissions you got that set to what is shown below.

         

  • mjbirrer's avatar
    mjbirrer
    Frequent Visitor

    GilbertQ  I know this is an old post, but i'm going throught he same thing...Everything is working fine except the Read All from Tenant.  I am getting an error/alert that "Tenant.Read.All" is not granted for my organization.  Is this something that i just need an O365 admin to approve?  I'm only admin for PowerBI, so not sure what to do at this point.

    • GilbertQ's avatar
      GilbertQ
      Super User

      Hi mjbirrer 

       

      Can you confirm that the app that was created in AAD has got the correct permissions from the person who created it?

      • mjbirrer's avatar
        mjbirrer
        Frequent Visitor

        I was the one that created it.  These are the permissions I have added.  Notice the warning on the tenant permission.

         

        Here is the script i'm trying to run.  Basically pull all workspaces and associated users.  I can do this for my workspaces, but when i open it up to -Scope Organization, it fails.

        Invoke-PowerBIRestMethod : One or more errors occurred.
        At C:\Users\jeffrey.birrer\Documents\PowerBI\PowerBI_ExportContent_NEW.ps1:38 char:13
        + $wkpacc = Invoke-PowerBIRestMethod -Url $APIUrl -Method Get|Convert ...
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : WriteError: (Microsoft.Power...werBIRestMethod:InvokePowerBIRestMethod) [Invoke-PowerBIRestMethod], AggregateException
        + FullyQualifiedErrorId : One or more errors occurred.,Microsoft.PowerBI.Commands.Profile.InvokePowerBIRestMethod


        # Authenticate to the Power BI Service API
        Connect-PowerBIServiceAccount

        # Arrays to hold retrieved data

        $access = @()

        # Get the workspace data
        $workspaces = Get-PowerBIWorkspace #-All -Scope Organization | Where-Object { $_.State -match 'Active' }

         

        ForEach($Workspace in $Workspaces)
        { $wkpacc = @()
        $Wkpname = $Workspace.Name
        $wkpid = $Workspace.Id
        $APIUrl = 'groups/'+$wkpid+'/users'
        $wkpacc = Invoke-PowerBIRestMethod -Url $APIUrl -Method Get|ConvertFrom-Json|SELECT -ExpandProperty Value|SELECT displayName,groupUserAccessRight|Add-Member -MemberType NoteProperty -Name WorkspaceName -Value $Wkpname -PassThru
        $access += $wkpacc
        }

        $access | Export-CSV "C:\Users\jeffrey.birrer\Desktop\PowerBI_WorkspaceUsers.csv" -NoTypeInformation