Inicio rápido de la API web con PowerShell y Visual Studio Code
PowerShell es un potente lenguaje de secuencias de comandos que puede automatizar tareas repetitivas y optimizar los flujos de trabajo, lo que lo convierte en una herramienta ideal para integrarse con Dataverse. Este inicio rápido se centra en ayudarlo a comenzar a usar PowerShell con la API web de Dataverse en Visual Studio Code. Visual Studio Code con PowerShell proporciona una alternativa a usar clientes de API como Postman o Insomnia.
En este inicio rápido aprenderá a:
- Usar Visual Studio Code con PowerShell para autenticarse interactivamente con Dataverse sin registrar una aplicación.
- Redacte solicitudes para la API web de Dataverse mediante el cmdlet PowerShell Invoke-RestMethod.
Nota
Este artículo de inicio rápido solo presenta conceptos básicos. Esto debería ser suficiente para las pruebas básicas. Después de completar los pasos de este artículo, vaya a Usar PowerShell y Visual Studio Code con la API web de Dataverse para obtener más información. capacidades avanzadas que lo harán más productivo, como por ejemplo:
- Crear funciones reutilizables
- Administrar excepciones
- Administrar límites de protección de servicio de Dataverse
- Corregir errores usando Fiddler
- Descargar el documento $metadata CSDL de la API web de Dataverse
Las instrucciones de este artículo deberían funcionar para Windows, Linux y macOS, pero estos pasos solo se han probado en Windows. Si se necesitan cambios, háganoslo saber utilizando la sección Comentario al final de este artículo.
Requisitos previos
No continúe sin confirmar que se cumple cada uno de los siguientes requisitos previos.
Instale o verifique que lo siguiente esté instalado
Instale Visual Studio Code. Consulte Descargar Visual Studio Code
Instalar la extensión de PowerShell para Visual Studio Code. Consulte PowerShell para Visual Studio Code
Instale PowerShell 7.4 o superior. Consulte Instalar PowerShell en Windows, Linux y macOS
Instale el módulo Az PowerShell versión 11.1.0 o superior. Consulte Instalar Azure PowerShell
Para actualizar una instalación existente a la última versión, use
Update-Module -Name Az -Force
Verificar instalación
Abra Visual Studio Code.
En el menú Terminal, seleccione Nueva terminal.
En el panel de navegación de Visual Studio Code, seleccione el icono para la extensión de PowerShell.
Copie y pegue el script siguiente en la ventana de la terminal de Visual Studio Code:
Write-Host 'PowerShell Version:'$PSVersionTable.PSVersion.ToString() Write-Host 'PowerShell Az version:'(Get-InstalledModule Az).Version
Presione Entrar. El resultado debería similar al siguiente:
PowerShell Version: 7.4.0 PowerShell Az version: 11.1.0
Si no ve resultados como este, instale o actualice los requisitos previos.
También necesitará
- Una cuenta de usuario válida para un entorno de Dataverse
- La dirección URL al entorno de Dataverse al que quiere conectarse. Consulte Ver recursos para desarrolladores para saber cómo encontrarlo. Se parece a esto:
https://yourorg.crm.dynamics.com/
, dondeyourorg.crm
es diferente. - Comprensión básica de lenguaje de scripting PowerShell
Pruébelo
En Visual Studio Code, seleccione Archivo > Nuevo archivo de texto, o Control+N para abrir un archivo nuevo.
No necesita guardar el archivo.
Copie y pegue el siguiente script en el archivo nuevo.
$environmentUrl = 'https://yourorg.crm.dynamics.com/' # change this ## Login if not already logged in if ($null -eq (Get-AzTenant -ErrorAction SilentlyContinue)) { Connect-AzAccount | Out-Null } # Get an access token $token = (Get-AzAccessToken -ResourceUrl $environmentUrl).Token # Common headers $baseHeaders = @{ 'Authorization' = 'Bearer ' + $token 'Accept' = 'application/json' 'OData-MaxVersion' = '4.0' 'OData-Version' = '4.0' } # Invoke WhoAmI Function Invoke-RestMethod -Uri ($environmentUrl + 'api/data/v9.2/WhoAmI') -Method Get -Headers $baseHeaders | ConvertTo-Json
Visual Studio Code debería detectar automáticamente que es un script de PowerShell.
Edite el valor de la variable
$environmentUrl
(https://yourorg.crm.dynamics.com/
) para que coincida con su URL del entorno de Dataverse.Pulse F5, o use el comando del menú de Visual Studio Code Ejecutar > Iniciar depuración.
Se abre una ventana de explorador nueva. En la ventana del navegador, ingrese o seleccione las credenciales que desea usar para autenticarse.
Verifique la salida en la ventana de la terminal de Visual Studio Code.
En la parte inferior de la terminal, busque el valor del tipo complejo WhoAmIResponse esperado para la función WhoAmI. Debería tener aspecto similar a éste:
{ "@odata.context": "https://yourorg.crm.dynamics.com/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.WhoAmIResponse", "BusinessUnitId": "639dea3c-505c-4c3a-b8b5-d916cb507e1e", "UserId": "d2159662-498a-406b-83cd-f515b7e561d6", "OrganizationId": "83e197ed-ede1-4886-81f2-f41fe9395297" }
En la ventana de terminal, escriba
cls
para borrar el contenido de la terminal.Pulse F5, o use el comando del menú de Visual Studio Code Ejecutar > Iniciar depuración para ejecutar el script de nuevo.
Debido a que ya inició sesión, la ventana del navegador no se abre. Puede continuar editando y ejecutando su script para probar diferentes solicitudes.
Cómo funciona
Esta sección describe los detalles del script de PowerShell incluido en la sección Pruébelo.
Autenticación
El script usa el comando del módulo Az PowerShell Get-AzTenant para obtener inquilinos autorizados para el usuario actual. Cuando no ha iniciado sesión, este comando devuelve un error. Este script utiliza el parámetro -ErrorAction SilentlyContinue
para ignorar el error y no se devuelve nada.
Cuando el comando Get-AzTenant
no devuelve nada, la secuencia de comandos utiliza Connect-AzAccount para abrir una ventana interactiva del navegador donde puede ingresar o seleccionar sus credenciales para iniciar sesión. Obtenga más información sobre cómo iniciar sesión en Azure PowerShell de forma interactiva o no interactiva con una entidad de servicio.
Finalmente, el script usa el comando Get-AzAccessToken con -ResourceUrl $environmentUrl
para obtener una instancia de PSAccessToken, que contiene una propiedad de cadena Token que es un token de acceso que puede usar para autenticar con Dataverse.
Cuando desee conectarse con un conjunto diferente de credenciales, deberá utilizar el comando Disconnect-AzAccount.
Autenticar usando diferentes entornos de shell
Azure PowerShell funciona con entornos de shell de Windows PowerShell y PowerShell, pero no con entornos de shell Cmd y Bash. Si desea autenticarse con entornos de shell Cmd o Bash, puede usar la CLI de Azure.
Este script usa comandos de la CLI de Azure para autenticar:
$environmentUrl = 'https://yourorg.crm.dynamics.com/' # change this
## <a name="login-if-not-already-logged-in"></a>Login if not already logged in
if ($null -eq (az account tenant list --only-show-errors)) {
az login --allow-no-subscriptions | Out-Null
}
# <a name="get-token"></a>Get token
$token = az account get-access-token --resource=$environmentUrl --query accessToken --output tsv
Esta tabla muestra los comandos equivalentes de Az PowerShell y Azure CLI:
Az PowerShell | CLI de Azure | Descripción |
---|---|---|
Get-AzTenant | az account tenant list | Intente recuperar una lista de inquilinos para detectar si ya ha iniciado sesión |
Connect-AzAccount | az login | Para iniciar sesión en Azure |
Get-AzAccessToken | az account get-access-token | Obtener nuevo token de acceso |
Disconnect-AzAccount | az logout | Cerrar sesión de Azure |
Usar Invoke-RestMethod
con la función WhoAmI
Una vez que tenga token de acceso configurado en la variable $token
, debe redactar la solicitud a la API web de Dataverse y enviarla mediante el cmdlet Invoke-RestMethod.
Establecer encabezados
Todas las solicitudes de API web de Dataverse deben incluir un conjunto de encabezados de solicitud HTTP comunes, incluido un encabezado Authorization
que incluya el valor token de acceso. Algunas operaciones requieren más encabezados. Más información sobre las solicitudes de encabezado de la API web de Dataverse
# <a name="common-headers"></a>Common headers
$baseHeaders = @{
'Authorization' = 'Bearer ' + $token
'Accept' = 'application/json'
'OData-MaxVersion' = '4.0'
'OData-Version' = '4.0'
}
Envíe la solicitud
La función WhoAmI es una de las operaciones Dataverse más simples que puede realizar. Debido a que es una función de OData en lugar de una acción, requiere el método HTTP GET
. Obtenga más información sobre las funciones de la API web
Utilice los parámetros Invoke-RestMethod Uri
, Method
y Headers
para enviar esta solicitud.
# <a name="invoke-whoami-function"></a>Invoke WhoAmI Function
Invoke-RestMethod -Uri ($environmentUrl + 'api/data/v9.2/WhoAmI') -Method Get -Headers $baseHeaders
| ConvertTo-Json
Para operaciones que utilizan métodos HTTP POST
o PATCH
, configure el uso del parámetro Body
para enviar la carga útil JSON.
El cmdlet ConvertTo-Json convierte el objeto devuelto en una cadena con formato JSON que es fácil de ver en la terminal.
Si desea capturar solo la propiedad UserId
de la respuesta, puede utilizar el siguiente script:
# <a name="get-userid"></a>Get UserId
$userId = (
Invoke-RestMethod `
-Uri ($environmentUrl + 'api/data/v9.2/WhoAmI') `
-Method 'Get' `
-Headers $baseHeaders
).UserId
Write-Host $userId
Solución de problemas
Asegúrese de verificar que todos los programas necesarios estén instalados como se describe en Verificar instalación.
Las siguientes son situaciones que pueden provocar que las instrucciones de este inicio rápido fallen:
No pasa nada cuando pulso F5
Asegúrese de que las teclas de función estén habilitadas en su teclado presionando F-Lock, Fn Lock, o Tecla de bloqueo de funciones en su teclado.
También puede utilizar el comando de menú de Visual Studio Code Ejecutar > Iniciar depuración en su lugar.
No se conoce tal anfitrión
Si ve este error después de ejecutar el script:
Invoke-RestMethod: untitled:Untitled-1:14:1
Line |
14 | Invoke-RestMethod -Uri ($environmentUrl + 'api/data/v9.2/WhoAmI') -Me …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| No such host is known.
Compruebe que $environmentUrl
representa un entorno al que tiene acceso. Asegúrese de haberlo cambiado del valor predeterminado (https://yourorg.crm.dynamics.com/
).
El usuario no es miembro de la organización
Si ve este error después de ejecutar el script:
Invoke-RestMethod: untitled:Untitled-1:14:1
Line |
14 | Invoke-RestMethod -Uri ($environmentUrl + 'api/data/v9.2/WhoAmI') -Me …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| { "error": { "code": "0x80072560", "message": "The user is not a member of the organization." } }
Asegúrese de que la cuenta que seleccione en la ventana del navegador sea la cuenta que tiene acceso al entorno Dataverse especificado por el parámetro $environmentUrl
.
Si está utilizando un conjunto de credenciales diferente al que usaba antes, use el comando Disconnect-AzAccount en la ventana del terminal.
ADVERTENCIA: TenantId '<su ID de inquilino>' contiene más de una suscripción activa
Cuando ejecuta el script por primera vez e inicia sesión con el navegador, es posible que reciba esta advertencia:
WARNING: TenantId '<your tenant id>' contains more than one active subscription. First one will be selected for further use.
To select another subscription, use Set-AzContext.
To override which subscription Connect-AzAccount selects by default, use `Update-AzConfig -DefaultSubscriptionForLogin 00000000-0000-0000-0000-000000000000`.
Go to https://go.microsoft.com/fwlink/?linkid=2200610 for more information.
Puede ignorar esta advertencia si la ve. Estas solicitudes no requieren suscripción.
Pasos siguientes
Obtenga más capacidades avanzadas para ser más productivo usando PowerShell y Visual Studio Code con la API web de Dataverse, por ejemplo, cómo:
- Crear funciones reutilizables
- Administrar excepciones
- Administrar límites de protección de servicio de Dataverse
- Corregir errores usando Fiddler
- Descargar el documento $metadata CSDL de la API web de Dataverse
Ahora que tiene la capacidad de autenticar y enviar solicitudes de API web de Dataverse mediante PowerShell, puede probar otras operaciones de API web.
Aprender más acerca de las Capacidades de API web de Dataverse mediante la comprensión de los documentos de servicio.