BindToGateway Powershell REST API POST falla – Necesito ayuda

Un usuario Pregunto ✅

dom99

Hola,

Estoy luchando para que la llamada API REST de BindToGateway funcione en powershell https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/bindtogatewayingroup

A continuación se muestra mi código para hacer la llamada a la API

Invoke-PowerBiRestMethod -Url "groups/$($workspaceid)/datasets/$($datasetid)/Default.BindToGateway" -Method POST -Body $jsonPostBody

Las variables del espacio de trabajo y del conjunto de datos son correctas y el cuerpo tiene el formato:

{
"datasourceObjectIds": [
"dc2f2dac-e5e2-4v37-af76-2a0bc10f1bs5",
"3bfe5d33-ag7d-4d24-b0b5-e2b96eb01cf5"
] ,
"gatewayObjectId": "1f85e798-5852-4fdd-ab01-33cc14b6e934"
}

Cuando ejecuto esto como un usuario que es administrador en la puerta de enlace, aparece el 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
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Cuando lo ejecuto como principal de servicio con todos los permisos de API delegados y un administrador en el espacio de trabajo y el propietario del conjunto de datos, aparece el siguiente 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
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Entonces, uno me da un error 400 y el otro un 404 sin más información útil que pueda ver.

¿Puede alguien ofrecer algunas sugerencias?

Gracias
Domingo

dom99

He encontrado las razones por las que esto no funcionaba, así que pensé en enumerarlas aquí para futuros usuarios. Para que esto funcione, hay algunas cosas que debe tener en cuenta:

1. Si la fuente de datos no está asignada a una puerta de enlace, no debe incluir los valores de ID de la fuente de datos (en realidad, no podrá obtener estos valores de ID si no está asignado). Supongo que la capacidad de especificar los valores de identificación de la fuente de datos solo es relevante cuando el conjunto de datos ya está asignado a una puerta de enlace, pero no sé si puede usar dos puertas de enlace separadas para un conjunto de datos con dos fuentes de datos.

2. Los principales de servicio no se pueden configurar para administradores de puertas de enlace, por lo que no puede usarlos

3. Los usuarios deben configurarse como administradores de puertas de enlace

4. El usuario debe estar asignado como usuario de la fuente de datos definida en la puerta de enlace (diferente de ser un administrador de la puerta de enlace)

Con todo esto configurado correctamente, funciona a las mil maravillas. 🙂

dom99

He encontrado las razones por las que esto no funcionaba, así que pensé en enumerarlas aquí para futuros usuarios. Para que esto funcione, hay algunas cosas que debe tener en cuenta:

1. Si la fuente de datos no está asignada a una puerta de enlace, no debe incluir los valores de ID de la fuente de datos (en realidad, no podrá obtener estos valores de ID si no está asignado). Supongo que la capacidad de especificar los valores de identificación de la fuente de datos solo es relevante cuando el conjunto de datos ya está asignado a una puerta de enlace, pero no sé si puede usar dos puertas de enlace separadas para un conjunto de datos con dos fuentes de datos.

2. Los principales de servicio no se pueden configurar para administradores de puertas de enlace, por lo que no puede usarlos

3. Los usuarios deben configurarse como administradores de puertas de enlace

4. El usuario debe estar asignado como usuario de la fuente de datos definida en la puerta de enlace (diferente de ser un administrador de la puerta de enlace)

Con todo esto configurado correctamente, funciona a las mil maravillas. 🙂

RakeshSinghr

En respuesta a dom99

¿Cómo logró vincular la puerta de enlace con la entidad de servicio?

dom99

En respuesta a RakeshSinghr

No lo hice, no fue posible por las razones enumeradas en la solución.

Hasta donde sé, todavía no es posible, si desea hacer esto, deberá vincularlo como un usuario con una licencia profesional que es un administrador de la puerta de enlace, y el punto número 4 que figura en la solución.

RakeshSinghr

En respuesta a dom99

Es bastante impactante saber que una operación tan simple aún no es posible. ¿Logró generar un ticket con Microsoft para que le dijeran que esto no es posible actualmente?

1) ¿Ha podido agregar la identificación de la aplicación a los usuarios de la fuente de datos de la puerta de enlace: https://docs.microsoft.com/en-us/rest/api/power-bi/gateways/adddatasourceuser? Hay un ejemplo con la identificación de la aplicación. ¿Quizás una vez que se agregue el enlace podría funcionar?

https://github.com/MicrosoftDocs/powerbi-docs/issues/1198

2) Supongo que todavía no es posible agregar la identificación de la aplicación como administrador a la puerta de enlace.

soy capaz de Connect-DataGatewayServiceAccount -ApplicationId $ApplicationId -ClientSecret $securePassword -Tenant $Tenantid

pero después de este paso, ninguno de los comandos de la puerta de enlace devuelve nada. Ej: Get-DataGatewayCluster

algun exito con eso?

Usar una cuenta de usuario con licencia profesional para la implementación automatizada no es lo ideal

Anónimo

En respuesta a dom99

Dom99… También me enfrento al mismo problema.

¿Está diciendo que con un principal de servicio no podemos lograr esto?

si se puede lograr puede proporcionar más detalles.

ilav

En respuesta a Anónimo

¿Alguien puede elegir el DSN adjunto a la puerta de enlace a través de una API o Powershell?

dom99

¿Alguien puede hacer que esta API funcione?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *