Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hi,
I am struggling to get the BindToGateway REST API call to work in powershell https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/bindtogatewayingroup
Below is my code for doing the API call
Invoke-PowerBiRestMethod -Url "groups/$($workspaceid)/datasets/$($datasetid)/Default.BindToGateway" -Method POST -Body $jsonPostBody
The workspace and dataset varibales are correct, and the Body is in the format:
{
"datasourceObjectIds": [
"dc2f2dac-e5e2-4v37-af76-2a0bc10f1bs5",
"3bfe5d33-ag7d-4d24-b0b5-e2b96eb01cf5"
] ,
"gatewayObjectId": "1f85e798-5852-4fdd-ab01-33cc14b6e934"
}
When I run this as a user who is an administrator on the gateway I get the error
Response status code does not indicate success: 404 (Not Found).
StackTrace : at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at Microsoft.PowerBI.Commands.Profile.InvokePowerBIRestMethod.<INVOKERESTMETHOD>d__31.MoveNext()
Exception : System.Net.Http.HttpRequestException
InvocationInfo : {Invoke-PowerBIRestMethod}
Line : Invoke-PowerBiRestMethod -Url $url -Method POST -Body $jsonPostBody
Position : At line:1 char:1
+ Invoke-PowerBiRestMethod -Url $url -Method POST -Body $jsonPostBody
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When I run it as a service principal with all deletgated API permissions and an admin on the workspace and dataset owner I get the following error
Message: Response status code does not indicate success: 400 (Bad Request).
StackTrace : at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at Microsoft.PowerBI.Commands.Profile.InvokePowerBIRestMethod.<INVOKERESTMETHOD>d__31.MoveNext()
Exception : System.Net.Http.HttpRequestException
InvocationInfo : {Invoke-PowerBIRestMethod}
Line : Invoke-PowerBiRestMethod -Url $url -Method POST -Body $jsonPostBody
Position : At line:1 char:1
+ Invoke-PowerBiRestMethod -Url $url -Method POST -Body $jsonPostBody
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
So one gives me a 400 and the other a 404 error with no further usfull info which I can see.
Can anyone offer any suggestions?
Thanks
Dominic
Solved! Go to Solution.
I have found the reasons why this wasnt working so thought I would list them here for future users. To get this to work there are a few things to be aware of:
1. If the datasource is not assigned to a gateway you need to not include the datasource ID values (you wont actually be able to get these ID values if it is unassigned). I assume the ability to specify the data source id values is only relevent when the dataset is already assigned to a gateway, but I dont know if you can use two separate gateways for one dataset with two datasources.
2. Service principals cant be set to administrators of gateways, so you cant use them
3. Users must be set as administrators of gateways
4. The user must be assigned as a user of the data source defined on the gateway (different from being a gateway admin)
With all this set up properly it works like a charm 🙂
I have found the reasons why this wasnt working so thought I would list them here for future users. To get this to work there are a few things to be aware of:
1. If the datasource is not assigned to a gateway you need to not include the datasource ID values (you wont actually be able to get these ID values if it is unassigned). I assume the ability to specify the data source id values is only relevent when the dataset is already assigned to a gateway, but I dont know if you can use two separate gateways for one dataset with two datasources.
2. Service principals cant be set to administrators of gateways, so you cant use them
3. Users must be set as administrators of gateways
4. The user must be assigned as a user of the data source defined on the gateway (different from being a gateway admin)
With all this set up properly it works like a charm 🙂
How did you manage to bind gateway with service principal?
I didnt, it wasnt possible for reasons listed in the solution.
As far as I'm aware it is still not possible, if you want to do this you will need to bind it as a user with a pro license who is an administrator of the gateway, and point number 4 listed in the solution
Its quite shocking to know such simple operation is not yet possible. Did you manage to raise a ticket with microsoft to be told this is not currently possible?
1) Have you been able to add App id to gateway datasource users - https://docs.microsoft.com/en-us/rest/api/power-bi/gateways/adddatasourceuser - there's an example with app id. Perhaps once Added binding might work?
https://github.com/MicrosoftDocs/powerbi-docs/issues/1198
2) I guess its still not possible to add app id as an admin to gateway?
I'm able to Connect-DataGatewayServiceAccount -ApplicationId $ApplicationId -ClientSecret $securePassword -Tenant $Tenantid
but after this step non of the gateway commandlets return anything. Ex: Get-DataGatewayCluster
any success with that?
Using a user account with pro license for automated deployment is not ideal
Dom99... I am also facing with the same issue.
Are you saying that with a Service principal we cannot achive this?
if it can be achieved can you provide more details.
Is someone able to pick the DSN attached to the gateway via an API or Powershell?
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
14 | |
2 | |
1 | |
1 | |
1 |