Contents

Introducción a los módulos de PowerShell

Muchas veces la gente que programamos tenemos tendencia a reinventar la rueda y escribir código que ya ha sido escrito por otro y, en muchos casos, incluso acabamos reescribiendo código escrito por nosotros mismos. En esta entrada veremos el funcionamiento de los módulos de PowerShell, con los que obtendremos** piezas de código reutilizables y fácilmente distribuibles** con los que podremos evitar que esto ocurra. ¡Veamos como funcionan!

/wp-content/uploads/2019/03/Introducción-a-los-módulos-de-PowerShell.png
Introducción a los módulos de PowerShell

¿Qué es un módulo de PowerShell?

Básicamente un módulo es un paquete que contiene comandos de PowerShell. La gran gracia de los módulos de PowerShell es que nos permiten, por un lado, empaquetar distintos comandos para organizarlos, usarlos y distribuirlos, y por el otro, obtener comandos desarrollados por terceros y utilizarlos de forma muy sencilla.

Una vez tenemos un módulo importado en nuestra sesión de PowerShell podremos utilizar los comandos que éste contiene como si de un comando nativo se tratara.

¿Cómo trabajar con módulos de PowerShell?

PowerShell incorpora una serie de cmdlets relacionados con los módulos con los que podremos interactuar con los mismos.

/wp-content/uploads/2018/06/Module_cmdlets.png
Comandos sobre módulos de PowerShell

Demos un repaso a las operaciones básicas que podremos utilizar.

Importar módulos

Lo primero que debemos hacer si queremos trabajar con módulos ya escritos es importarlos. Una vez importados podremos utilizar los comandos que éstos contienen de forma totalmente transparente. Podemos importar módulos:

  • De forma automática (a partir de PowerShell versión 3.0) ubicándolos en una carpeta que forme parte de nuestro path de módulos. Al hacerlo de este modo el módulo se importará la primera vez que ejecutemos un comando del mismo en la sesión actual.
  • Podemos consultar  y modificar el path de módulos con la variable de entorno $env:PSModulePath.
  • Podemos desactivar este comportamiento modificando la variable $PSModuleAutoloadingPreference.

/wp-content/uploads/2018/06/Module_path.png
Path de módulos de PowerShell

  • Utilizando el cmdlet Import-Module pasando como parámetro la ruta de nuestro módulo de PowerShell.

/wp-content/uploads/2018/06/import_module.png
Importar módulos de PowerShell

Consultar módulos cargados y disponibles

Si queremos consultar los módulos de PowerShell cargados en nuestra sesión o queremos listar los disponibles dentro de las distintas ubicaciones de nuestro path de módulos deberemos valernos del cmdlet Get-Module:

  • Con su comportamiento por defecto Get-Module lista los módulos cargados en nuestra sesión.

/wp-content/uploads/2018/06/Get-Module.png
Listar módulos de PowerShell con Get-Module

  • Si añadimos al comando el parámetro -ListAvailable éste nos devolverá una lista con todos los módulos disponibles para su carga clasificado según la ubicación de los mismos dentro de nuestro path.

/wp-content/uploads/2018/06/Get-Module-listavailable.png
Listar módulos disponibles con Get-Module

Ambos comportamientos del cmdlet, como se aprecia en las capturas, nos muestran los comandos disponibles dentro de dicho módulo.

Quitar un módulo de PowerShell ya cargado en nuestra sesión

Como seguro que se puede intuir gracias a la coherencia de los verbos de PowerShell podemos apoyarnos del cmdlet Remove-Module para quitar un módulo previamente cargado. Esta opción puede sernos muy útil si queremos cargar, por ejemplo, una nueva versión de un módulo que ya teníamos cargado.

¿Dónde encuentro módulos de PowerShell?

Existen varios sitios desde los que descargar módulos:

  • Repositorios públicos de módulos como PowerShell Gallery o PSGet.
  • Repositorios de código como GitHub.
  • Webs de fabricantes que decidan integrar PowerShell en sus soluciones.
  • Blogs técnicos en los que se publique código como este :-).

Siguientes pasos

Con esta introducción hecha ya estamos listos para descargar código, inspeccionarlo (una de las mejores formas de aprender) y utilizarlo. En futuras entradas veremos cómo crear nuestros propios módulos.