Precargar librerías en PowerShell

Vamos a ver cómo realizar una carga de librerías de utilidades en nuestra consola. Una manera fácil y limpia, que no sólo nos permitirá reutilizar funciones, sino que nos evitará tener que importar los módulos en cada nuevo fichero de scripts que creemos… y por qué no, ¡una dosis de Best Practices! 

Cuando cargamos nuestra consola ya disponemos de una serie de cmdlets precargados. Estos se encuentran en nuestro equipo tras haber instalado Windows PowerShell. Si además instalamos las consolas de administración de SharePoint Online, la acción que realizan internamente es irse a las ubicaciones e instalar ahí sus módulos.

Nosotros haremos lo mismo. Tenemos dos opciones para conocer y editar la ubicaciones en nuestro equipo.

  1. Ejecutaremos el siguiente comando:

    Y a continuación:
  2. Panel de control -> Sistema -> Configuración avanzada del entorno -> Variables de entorno
    PsModulePath

Esto nos devolverá rutas físicas de nuestra máquina separadas por ‘;’ (punto y coma). En mi máquina me devuelve:

C:\Users\{usuario}\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules\;C:\Program Files\SharePoint Online Management Shell\;C:\Program Files (x86)\SharePoint Online Management Shell\;C:\SP ftw\

 

Como decía antes, podéis ver que me devuelve los de la consola Windows PowerShell más los que ha agregado la instalación de la consola para SharePoint Online, y el que yo mismo he agregado.

Pues bien, vamos a la ruta que hemos creado, en mi caso C:\SP ftw\.

  1. Creamos una carpeta con nombre Mis funciones.
  2. Dentro de dicha carpeta creamos un fichero llamado Mis funciones.psm1
  3. En el fichero Mis funciones.psm1 incluimos el siguiente código:

Notas

  • En primer lugar, como podéis ver, la carpeta que creemos y el fichero deben llamarse igual.
  • El fichero tendrá extensión psm1, para indicar que es un módulo.
  • Las funciones incluidas deben incluir [CmdletBinding()] al inicio.
  • Si requieren parámetros podremos hacerlo en la etiqueta param().
  • Podemos seguir la estructura de ciclo de vida BEGIN-PROCESS-END de la siguiente forma:
    • Begin: Preprocesado de la función. Se ejecuta una sola vez, al inicio.
    • Process: Nos permite poner el código pesado de la ejecución. Esto también nos permite hacer uso de las etiquetas -whatif, -confirm, -verbose, propias de PowerShell.
    • End: Se ejecuta una sola vez, al final.
  • Podemos crear más funciones dentro del mismo *.psm1.
  • Podemos crear otros módulos, para dividir por bloques funcionales, creando otras carpetas con su *.psm1 de igual nombre.

Probar que todo funciona

  1. Abrimos la consola.
  2. Ejecutamos: Get-Module -ListAvailable. Nos aparecerá una lista de los módulos del sistema.
  3. Comprobamos que nuestro módulo se ha precargado. Aparecerá el último de la lista.get-module
  4. También podremos listar la lista de funciones que tenemos en un módulo, ejecutando:
  5. Podremos ejecutar en nuestra consola la función que hemos cargado.Mis funciones

Espero que esto os ahorre mucho trabajo, y os ayude a mejorar el trabajo del día a día, haciéndolo más organizado. Vivan los Cmdlets!

2 comentarios en “Precargar librerías en PowerShell”

  1. He intentado subir mis funciones ya creadas, pero me devuelve un error ‘The term is not recognized as a cmdlet’. Creo que he seguido todos los pasos, poniendo la ruta de mis *ps1 en la variable de entorno.

    He renombrado todos los ficheros a psm1 e incluido la etiqueta [CmdletBinding()]. Algo me debe faltar, pero no sé que es, estoy perdidísima!!! Aun así, gracias por compartir.

    1. ¿Has creado una carpeta al primer nivel con el mismo nombre del fichero *.psm1? A mí me pasó y es que al parecer espera recibir una estructura tipo:

      CarpetaModulos (Carpeta de la variable de entorno PsModulePath)
      |-> MisModulos
      |-> MisModulos.psm1

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.