cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Advocate III
Advocate III

Set Service Principal s Dataset Owner

Hi,

 

I wonder if someone can help me. I need to set an existing dataset to be owned by a service principal but cant seem to manage it.

 

the two options I can see are:

 

1. Manually set it - cant do this because setting manually assigns the dataset ownership as the logged in user, but you cant log in to the service as a service principal

 

2. use the powershell API - same problem here, there doesnt seem to be an option to set who owns it, it just picks up the logged in user and I dont know how to log in via the API as a service principal. Found a take over script example here https://github.com/Azure-Samples/powerbi-powershell/blob/master/takeover-dataset.ps1

 

Does anyone know how I can do this?

 

Thanks

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted
Super User I
Super User I

Hi @dom99 ,

 

Using powershell it is possible

 

I already created the entier script and published here

https://gallery.technet.microsoft.com/AzureDevOps-CICD-for-fefd58b8

 

The powershell scripts looks like

 

$applicationId = "" 
$clientsec = "" | ConvertTo-SecureString -AsPlainText -Force # 
 
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $applicationId, $clientsec 
Connect-PowerBIServiceAccount -ServicePrincipal -Credential $credential -TenantId "" 
  
 
$workspacename="PowerBI_CICD_PROD" 
$datasetname="AdventureReports" 
##Getworksapce 
 
$workspace =Get-PowerBIWorkspace -Name $workspacename 
 
# GetDataSets 
$DatasetResponse=Invoke-PowerBIRestMethod -Url "groups/$($workspace.id)/datasets" -Method Get | ConvertFrom-Json 
 
 
# Get DataSet 
$datasets = $DatasetResponse.value 
 
     foreach($dataset in $datasets){ 
                if($dataset.name -eq $datasetname){ 
                $datasetid= $dataset.id; 
                break; 
                } 
 
            } 
 
## Take Over DataSet 
 
Invoke-PowerBIRestMethod -Url "groups/$($workspace.id)/datasets/$($datasetid)/Default.TakeOver" -Method Post 

 







Did my reply helpful to you ? Please give Kudos

Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




View solution in original post

5 REPLIES 5
Highlighted
Super User I
Super User I

Hi @dom99 ,

 

Using powershell it is possible

 

I already created the entier script and published here

https://gallery.technet.microsoft.com/AzureDevOps-CICD-for-fefd58b8

 

The powershell scripts looks like

 

$applicationId = "" 
$clientsec = "" | ConvertTo-SecureString -AsPlainText -Force # 
 
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $applicationId, $clientsec 
Connect-PowerBIServiceAccount -ServicePrincipal -Credential $credential -TenantId "" 
  
 
$workspacename="PowerBI_CICD_PROD" 
$datasetname="AdventureReports" 
##Getworksapce 
 
$workspace =Get-PowerBIWorkspace -Name $workspacename 
 
# GetDataSets 
$DatasetResponse=Invoke-PowerBIRestMethod -Url "groups/$($workspace.id)/datasets" -Method Get | ConvertFrom-Json 
 
 
# Get DataSet 
$datasets = $DatasetResponse.value 
 
     foreach($dataset in $datasets){ 
                if($dataset.name -eq $datasetname){ 
                $datasetid= $dataset.id; 
                break; 
                } 
 
            } 
 
## Take Over DataSet 
 
Invoke-PowerBIRestMethod -Url "groups/$($workspace.id)/datasets/$($datasetid)/Default.TakeOver" -Method Post 

 







Did my reply helpful to you ? Please give Kudos

Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




View solution in original post

Highlighted

@Jayendran Hi, thanks for the response.

 

Great thank you thats exactly what I needed. I will try it out shortly 🙂

Highlighted

Hi @Jayendran 

 

I've tried your script but unfortunatly the method below fails.

 

Invoke-PowerBIRestMethod

 

 I successfully log in as the service principal and assign the values as required, the script works up until the very end.

 

The error message is:

Invoke-PowerBIRestMethod : One or more errors occurred.
At line:3 char:1
+ Invoke-PowerBIRestMethod -Url "groups/$($workspace.id)/datasets/$($da ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Microsoft.Power...werBIRestMethod:InvokePowerBIRestMethod) [Invoke-PowerBIR
estMethod], AggregateException
+ FullyQualifiedErrorId : One or more errors occurred.,Microsoft.PowerBI.Commands.Profile.InvokePowerBIRestMethod

 

Can you help with finding out why its not working? I found your powershell scripts you'd uploaded, very handy to have thank you.

Highlighted

Hi @dom99 ,

 

  • Make sure that SPN have admin access to your Workspace.
  • Make sure the workspace id ,datasetid are properly passing to the script 

 

After you got the error run the below script

 

Resolve-PowerBIError

Which will gives you the exact error

 







Did my reply helpful to you ? Please give Kudos

Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




Highlighted

Hi @Jayendran 

 

I read the documentation and turns out the -Body parameter (sometimes called the content) is now required for POST operations.

 

so the invoke method looks like:

 

Invoke-PowerBIRestMethod -Url "groups/$($workspace.id)/datasets/$($datasetid)/Default.TakeOver" -Method Post -Body ""

 

thanks for your help 🙂

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

Community Conference

Microsoft Power Platform Communities

Check out the Winners!

secondImage

Power Platform 2020 release wave 2 plan

Features releasing from October 2020 through March 2021