Scripts y manifiesto de módulos

El siguiente paso es convertir los scripts en módulos.

Los módulos sirven para agrupar todas las heramientas personales en un solo fichero.

Crear un módulo es tan sencillo como grabar el script y en vez de guardarlo como .ps1, lo grabamos como .psm1.

Una vez tenemos el módulo, podemos importarlo indicando la ruta completa a la ubicación del fichero:

1 PS> Import-Module c:\scripts\misHerramientas.psm1

Verificamos que hemos importado todas las funciones contenidas en el módulo mediante:

1 PS> Get-Command -module misHerramientas

Pero todavía podemos ir un poco más allá y hacer que el módulo se importe automáticamente cuando un script intente usar una función contenida en él.

Para ello, debemos colocar el módulo en una ubicación especial. Podemos inspeccionar las ubicaciones en las que se buscan los módulos de forma automática mediante:

powershell PS> $env:PSModulePath -split ";" `

Usamos -split “;” para facilitar la lectura de las diferentes ubicaciones de la variable.

No es recomendable ubicar nuestros módulos personales en c:\windows\system32\windowsPowerShell\v1.0\modules\.

Para nuestros módulos personalizados, debemos usar la ubicación: c:\users\{nombre.usuario}\Documents\PowersShell\Modules.

La ruta c:\users\{nombre.usuario}\Documents\PowersShell\Modules no existe por defecto y debemos crearla manualmente.

En la carpeta Modules creamos una carpeta para nuestro módulo; esta carpeta debe llamarse exactamente como el módulo.

Una vez hemos copiado el módulo en esta ubicación especial, si ejecutamos un script que hace referencia a una de las funciones incluidas en nuestro módulo:

  • en la consola, tenemos autocompletado mediante la tecla Tab para las funciones incluidas en el módulo.
  • en los scripts, al hacer referencia a una función incluida en el módulo, PowerShell lo carga de forma dinámica sin que tengamos que importarlo explícitamente en el script.

Manifiesto

El manifiesto indica qué es lo que contiene el módulo. El manifiesto tambien permite definir dependencias, de manera que si, más adelante, cambiamos alguna de las dependencias de nuestro módulo, quienes usen el módulo sean conscientes de los cambios (en vez de encontrarse con que sus scripts fallan sin saber porqué).

El manifiesto también nos ayuda a gestionar las diferntes versiones que puede tener el módulo, recursos que necesita, etc.

Cuando PowerShell importa un módulo, busca:

  • Un manifiesto para el módulo: un fichero con el mismo nombre del módulo y extensión .psd1.
  • Un módulo binario como MisHerramientas.dll
  • Un módulo : MisHerramientas.psm1
  • El cmdlet New-ModuleManifest

Una manera muy sencilla de establecer los valores para las propiedades del cmdlet New-MmoduleManifest es a través de Show-Command New-ModuleManifest.

Seguramente eliminaré esta parte o la reduciré al mínimo.