cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
dom99
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
Jayendran
Solution Sage
Solution Sage

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 

 

View solution in original post

5 REPLIES 5
Jayendran
Solution Sage
Solution Sage

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 

 

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.

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

 

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 🙂

@Jayendran Hi, thanks for the response.

 

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

Helpful resources

Announcements
2022 Release Wave 1 760x460.png

2022 Release Wave 1 Plan

Power Platform release plan for the 2022 release wave 1 describes all new features releasing from April 2022 through September 2022.

Power BI December 2021 Update_carousel 768x460.jpg

Check it Out!

Click here to read more about the December 2021 Updates!

Top Solution Authors