PowerShell para la administración automática de Dynamics AX 2012 (PS-II)

En la primera entrega de esta serie sobre PowerShell y DevOps para Microsoft Dynamics AX 2012  hablábamos sobre los principios más básicos de PowerShell y su sintaxis. También vimos en post anteriores como PowerShell se puede usar de formas bastante creativas.

Keyboard

Esta vez vamos a ver los comandlets específicos para la administración de Microsoft Dynamics AX 2012, que podemos separar en varias familias:

Gestión de Modelos y la Model Store

Estos comandlets son muy importantes y van a ser la base de nuestra estrategia DevOps, combinada con los procesos builds automáticos que tendremos configurados en nuestro TFS, si es que los utilizamos.

La combinación de estos componentes va a permitirnos diseñar procesos que actualicen automáticamente nuestros entornos, orientando nuestros procesos hacia la integración o el despliegue continuo de nuestros entornos, especialmente entornos de desarrollo y/o pruebas. Hablaremos sobre esto en los siguientes posts de esta serie.

Estos son los que normalmente utilizamos para estas tareas, aunque vale la pena echar un vistazo a la referencia completa porque todos pueden ser útiles para tareas concretas o para scripts que automaticen tareas más completas:

Modelos

Comando Descripción
New-AXModel  Crea un nuevo modelo en la Model Store
Uninstall-AXModel  Elimina un modelo de la Model Store
Install-AXModel  Importa un modelo (desde un fichero) en la Model Store
Export-AXModel  Exporta un model de la Model Store a un fichero .axmodel
Move-AXModel  Mueve los objetos de un modelo a otro modelo, combinando todos los objetos en este último.

Model Store

Comando Descripción
Import-AXModelStore  Importa una Model Store (desde un fichero)
Export-AXModelStore  Exporta una Model Store a un fichero fichero .axmodelstore
Initialize-AXModelStore  Inicializa una model store para ser utilizada.
 Es recomendable utilizar este comando después de algunas tareas de mantenimiento.
Optimize-AXModelStore  Optimiza y reindexa la model store para mejorar su rendimiento.
 Es recomendable utilizar este comando después de algunas tareas de mantenimiento.
Set-AXModelStore  Asigna a la Model Store ciertos flags que indican las acciones que se han realizado sobre ella. Estos flags van a influir, por ejemplo, en si se muestra o no la cabina de actualización de modelo al iniciar un cliente, y son:

  • InstallMode (mostrar cabina);
  • NoInstallMode (no mostrar cabina)

Gestión y despliegue de informes y Reporting Services

La gestión de informes es otra de las tareas que podemos automatizar dentro de nuestras builds o scripts de despliegue. Aquí dejo los comandos más utilizados pero hay muchos más, consultad la referencia completa para verlos todos:

Comando Descripción
Publish-AXReport  Publica un informe desde el AOS hacia el Report Rerver de SSRS.

 Es recomendable revisar la documentación de este comando porque tiene varios parámetros muy interesantes para desplegar informes de manera optimizada.

Test-AXReportServerConfiguration  Comprueba la configuración y la conectividad entre el AOS y el Report Server. Este comando es útil si tenemos problemas con el despliegue o la impresión de informes, para detectar posibles configuraciones erróneas o qué partes del sistema pueden estar fallando.
Get-AXReportServerConfiguration  Muestra la configuración actual, incluyendo la mostrada en el formulario correspondiente en Dynamics AX 2012 y algunos parámetros extra.
Get-AXReport  Muestra información sobre el informe como la fecha de creación/modificación, el usuario que lo ha modificado, la lista de diseños, el correspondiente proyecto de Visual Studio en el AOT, etc.

Este comando es muy útil sobre todo cuando se usa en scripts de despliegue pero a veces es útil también utilizado directamente en la consola para obtener información de cualquier informe que esté dando problemas.

Gestión de usuarios y artefactos de seguridad

Otra tarea que es muy propia de su utilización tanto en consola como en scripts de automatización de tareas es la gestión de usuarios, y en el caso de AX, también de roles de seguridad.

Cabe recordar que como veremos, PowerShell no se limita al manejo de AX sino que incluye todas las funcionalidades de Windows, con lo que estos comandos se pueden utilizar junto a los propios de la gestión de Active Directory para la creación, mantenimiento y supervisión automática de los usuarios en AX en base a los cambios en el dominio.

Usuarios

Comando Descripción
New-AXUser  Crea un nuevo Usuario
Disable-AXUser  Desactiva un Usuario
Get-AXUser  Devuelve una lista con todos los Usuarios

 Este comando devuelve, entre otras informaciones útiles sobre cada usuario, su SID en Active Directory, por lo que resulta el punto de enlace ideal entre la seguridad de Dynamics AX y los usuarios del dominio.

Roles

Comando Descripción
New-AXSecurityRole  Crea un Rol de seguridad
Remove-AXSecurityRole  Elimina un Rol de seguridad
Add-AXSecurityRoleMember  Añade un Usuario a un Rol
Get-AXSecurityRole  Devuelve una lista con los Roles que tiene asignado un Usuario
Get-AXSecurityRoleMember  Devuelve una lista con los Usuarios asignados a un Rol
Get-AXSecurityRoleInfo  Devuelve información sobre todos los Roles existentes en el sistema

Debo insistir en revisar la referencia completa, no tiene sentido reproducir aquí la toda la lista de comandos disponibles por eso he puesto sólo los más relevantes, pero hay muchos más y es interesante conocerlos:

No sólo de AX vive el hombre

Hasta aquí he hablado sólo de los comandlets disponibles dentro de las herramientas de administración de Dynamics AX 2012. Pero no debemos limitarnos a esto. Para realizar tareas de automatización complejas vamos a necesitar integrarnos con el resto del sistema y utilizar no sólo los comandos genéricos de PowerShell sino los que vienen con el resto de productos que utilicemos como Analysis Services, Sharepoint, Active Directory, SQL Server, servicios de Azure, … cualquier producto de Microsoft tiene su correspondiente módulo de PowerShell para interactuar con sus componentes.

Por ejemplo, hace un tiempo mostré como obtener información la información de los usuario susuarios en Active Directory desde X++, esto mismo se puede hacer desde PowerShell para ser reutilizado rápidamente por los administradores sin necesidad de abrir AX; También mostré hace tiempo cómo utilizar PowerShell para asignar nuestro usuario activo a una base de datos de AX que hemos restaurado desde otro dominio para hacernos administradores, como ejemplo de uso del módulo de SQL Server. Y así podríamos seguir…

Ejemplos de módulos que vamos a utilizar:

El uso de estos módulos es bastante intuitivo, tras importar el módulo correspondiente con Import-Module podemos utilizar los comandlets que ya vimos en nuestra introducción a PowerShell tales como Get-Command y Get-Help para obtener cuales son los comandos disponibles y cómo utilizarlos.

PowerShell - Import-Module

Reutilizar es la clave

Como sucede con el resto de consolas y lenguajes de script, siempre hay que intentar evitar reinventar la rueda desarrollando scripts que muy probablemente alguien haya hecho antes que nosotros. Buscando en internet se pueden encontrar scripts para realizar prácticamente cualquier tarea de administración usando PowerShell.

Además, hay varias iniciativas para publicar scripts específicos para el uso con Microsoft Dynamics AX 2012, el más notable creo yo es el paquete de scripts publicado por Martin Dráb en codeplex y que incluye acciones para casi todas las fases de un despliegue automático. Prácticamente podemos montar un sistema de builds y actualización de entornos utilizando sólo PowerShell.

Puede que este paquete te sirva o puede que no, pero en cualquier caso se puede aprender mucho de ese código y es una buena base para desarrollar los tuyos propios, ya que incluye buenas ideas específicas para conectar a servidores AX. Se puede descargar aquí:

Extra

Como nota final voy a comentar un artículo que, más que por su utilidad real, vale la pena revisar por sus posibilidades. Recordemos que desde PowerShell se pueden utilizar ensamblados de .NET y eso incluye por supuesto el .NET Business Connector de AX. En este artículo nos enseñan un ejemplo de esta utilización, tenga sentido o no 😉

Y hasta aquí esta segunda parte, que tras la primera introducción va a ser el punto de partida para desarrollar nuestros scripts de ¡DevOps para AX 2012!