PowerShell_> Creación de Módulos

¡Hola a todos! hoy continuaremos con la saga de Powershell y vamos añadiendo nuevas cosas, en el caso de hoy hablaremos de los módulos.

¿Qué són los módulos y para qué sirven?

Los módulos nos permitirán agrupar, dividir y organizar código, para poder reutilizarlo de forma dinámica, un módulo puede contener; cmdlets, funciones, alias, etc.

Hay 3 tipos de Módulos; Binarios, de script y manifiestos de módulos. Básicamente los Binarios son .dll que contienen código compilado, los Script son archivos de texto (extensión .psm1) que contienen código Powershell, funciones, alias, etc. y los Manifiestos de módulo vienen a describir el contenido de un módulo, una vez que se ha creado un módulo podemos crear un archivo con extensión .psd1 donde podemos definir el autor del módulo, archivos del módulo, etc.

Nosotros vamos a crear un módulo sencillo, para empezar a ver como funciona esto, pero antes… un tip:

Antes de crear un módulo, recomiendo pasar por 3 fases:

Fase 1.- Primero desde la línea de comandos.
Fase 2.- Creamos una función.
Fase 3.- Parametrizamos la función e procuramos hacerlo reútilizable.

Los módulos de puede cargar de varias formas, automáticamente cada vez que arrancamos una consola powershell o cargándolas/descargándolas con los cmdlets Import-Module y Remove-Module.

Para cargarlas automáticamente, crearemos en la siguiente ruta, un directorio llamado como nuestro módulo y dentro los archivos relacionados. Os pongo un ejemplo:

Y el contenido del archivo lo encontraréis en nuestro github, pero os pongo aquí un pequeño pantallazo para que podamos analizar el contenido.

Como podéis observar en la primera imagen se ven claramente 2 funciones,  y la última línea utilizo el Export-ModuleMember para exportar las funciones que quiero, nota importante: En un módulo podemos exportar las funciones que queramos, pero también podemos utilizar funciones privadas para utilizar dentro del módulo, por ejemplo para realizar alguna tarea se puede crear una función que trabaje con otras funciones dentro del módulo pero que no tengan sentido fuera del mismo y que solo nos interesen que funcionen de forma privada. Con Export-ModuleMember controlaremos que funciones son exportadas.

Para saber que módulos tenemos cargados utilizaremos el cmdlet Get-Module.

Ahí tenemos a nuestro módulo, con 2 funciones, InfoDisco y InfoSoftinstalado. Vamos a descargarlo con el cmdlet Remove-Module.

Para cargarlo de nuevo, bastará ejecutar el cmdlet Import-Module, este cmdlet también es necesario ejecutarlo en nuestros scripts si queremos utilizar las funciones, alias y demás de nuestros módulos.

Más cositas a tener en cuenta, al principio del post os comentaba que creabamos una carpeta donde meter los módulos, pero no es obligatorio tenerlo allí, podemos agregar rutas especificas en la variable de entrono PSmodulePath, que por defecto nos mostrará 2 rutas, hasta ahora ya sabemos que es un módulo, tipos, como cargarlos y descargarlos, pero una vez que los tenemos cargados, como llamamos a sus funciones…. pues igual que llamaríamos a cualquier cmdlet o función desde nuestros scripts o consola, veamos las 2 cosas, las variables de entorno relacionadas con PsmodulePath, y por ejemplo miraremos la ayuda de la función InfoDisco.

Esta función es bastante simple, y ni siquiera tiene parámetros, las etiquetas BEGIN{},PROCESS{} Y END{} las pongo por intentar seguir las buenas prácticas recomendadas, pero no son necesarias.

Veamos la otra función:

Esta función ya tiene 1 parámetro, una hash table (de las que hablaré en otro post), que en este caso la utilizo para que no me salga una línea ENORME, veamos la ayuda y el resultado…

Y se acabó de momento el post de hoy, como siempre espero que os haya gustado y que continuemos aprendiendo con esta serie de posts un poquito más sobre Powershell.

Enlaces y referencias:
Understanding a Windows PowerShell Module
Binary Module
Script Module
Manifest Module
Módulo del ejemplo del post

Una respuesta a “PowerShell_> Creación de Módulos”

Deja un comentario

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