PowerShell 101: Importando Módulos

¿Alguna vez has ejecutado un comando de PowerShell y recibido el temido mensaje de error “El término no se reconoce como el nombre de un cmdlet”? Aquí está la clave: el problema podría ser tan simple como un módulo faltante o no importado. Incluso en las versiones modernas de PowerShell, entender cómo funcionan los módulos es clave para diagnosticar y solucionar estos problemas.

¿La buena noticia? Esta guía cubre todo, desde verificar qué módulos ha importado actualmente PowerShell hasta dominar cómo importarlos, eliminarlos y reimportarlos. Al final, mejorarás en la gestión de módulos de PowerShell sin problemas, ya sea solucionando errores inesperados o trabajando en módulos personalizados.

¡Sumérgete y deja que los módulos de PowerShell te ayuden a optimizar tu flujo de trabajo con confianza!

Verificando Módulos Importados

Los comandos de PowerShell pueden fallar con mensajes de error crípticos cuando los módulos no se cargan correctamente. Por ejemplo, intentar ejecutar Get-ADUser sin importar primero el módulo ActiveDirectory resultará en un error de “comando no encontrado”. De manera similar, intentar usar comandos de Azure requiere que el módulo Az esté presente en tu sesión.

PowerShell debe importar el módulo relevante para asegurar que los comandos funcionen como se espera y hacer sus comandos disponibles.

Para ver los módulos actualmente importados, usa:

Get-Module

Cuando ejecutas Get-Module, verás una salida similar a esta:

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   7.0.0.0    Microsoft.PowerShell.Management    {Add-Computer, Add-Content, Checkpoint-Computer...}
Manifest   7.0.0.0    Microsoft.PowerShell.Utility       {Add-Member, Add-Type, Clear-Variable...}
Script     2.0.0      PSReadline                         {Get-PSReadLineKeyHandler, Get-PSReadLineOption...}
Binary     1.0.0.1    SmbShare                          {Get-SmbShare, Set-SmbShare, Remove-SmbShare...}

Esto muestra una lista de todos los módulos actualmente cargados en tu sesión de PowerShell, mostrando su tipo (Manifest, Script o Binary), número de versión, nombre del módulo y un resumen de los comandos que proporcionan. La columna ExportedCommands muestra qué cmdlets están disponibles de cada módulo.

A continuación, examina los comandos de un módulo que puedes importar:

Get-Module -Name SmbShare -ListAvailable | Select exportedcommands

Cuando ejecutes este comando, verás una salida que lista todos los comandos disponibles en el módulo SmbShare. Por ejemplo:

ExportedCommands
----------------
{Get-SmbShare, New-SmbShare, Remove-SmbShare, Set-SmbShare, Get-SmbShareAccess, 
Grant-SmbShareAccess, Block-SmbShareAccess, Revoke-SmbShareAccess, Get-SmbMapping}

Esta salida muestra todos los cmdlets que puedes usar del módulo SmbShare. Cada comando tiene un propósito específico para gestionar los recursos compartidos SMB:

  • Get-SmbShare: Lista todos los recursos compartidos SMB en el sistema
  • New-SmbShare: Crea un nuevo recurso compartido SMB
  • Remove-SmbShare: Elimina un recurso compartido SMB existente
  • Set-SmbShare: Modifica propiedades de un recurso compartido existente

Entender qué comandos están disponibles te ayuda a elegir la herramienta adecuada para tu tarea. Puedes usar comandos similares para explorar las capacidades de otros módulos.

Importando Módulos Automáticamente

Para ver cómo PowerShell maneja los módulos dinámicamente, aquí tienes un ejemplo que muestra la carga dinámica de módulos:

PS> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   7.0.0.0    Microsoft.PowerShell.Management    {Add-Computer, Add-Content...}
Manifest   7.0.0.0    Microsoft.PowerShell.Utility       {Add-Member, Add-Type...}
Script     2.0.0      PSReadline                         {Get-PSReadLineKeyHandler...}

PS> Get-SmbShare

PS> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   7.0.0.0    Microsoft.PowerShell.Management    {Add-Computer, Add-Content...}
Manifest   7.0.0.0    Microsoft.PowerShell.Utility       {Add-Member, Add-Type...}
Script     2.0.0      PSReadline                         {Get-PSReadLineKeyHandler...}
Binary     1.0.0.1    SmbShare                          {Get-SmbShare, Set-SmbShare...}

Como se mostró anteriormente, cuando ejecutas Get-SmbShare, PowerShell importa automáticamente el módulo SmbShare. Puedes ver que este módulo aparece en la lista después de ejecutar el comando.

Eliminando y Re-importando Módulos

Puede que necesites limpiar un módulo de la memoria, como al probar nuevas configuraciones o resolver conflictos. Si es así, no te preocupes; PowerShell te permite eliminar un módulo sin desinstalarlo, lo que te permite reiniciar o actualizar la sesión según sea necesario.

Para eliminar un módulo de la memoria:

Remove-Module -Name SmbShare

El Remove-Module cmdlet borra el módulo de la memoria, pero no lo desinstala de tu sistema. Aunque eliminar módulos es raro en el uso diario, es útil para escenarios específicos.

Para importar manualmente el módulo de nuevo:

Import-Module -Name SmbShare

La importación manual puede ser útil al solucionar problemas o trabajar en entornos personalizados.

Re-importando Módulos Después de Cambios

Cuando trabajas en un módulo en desarrollo, puedes encontrar situaciones donde los cambios que realizas no tienen efecto inmediato. Los datos o configuraciones antiguas pueden seguir cargadas en el módulo, causando este comportamiento.

Re-importar el módulo asegura que PowerShell use la última versión. Si modificas un módulo que estás desarrollando, debes re-importarlo.

Puedes usar tanto Remove-Module como Import-Module o simplificar el proceso con el parámetro Force:

Import-Module -Name SmbShare -Force

El parámetro Force descarga y recarga el módulo en un solo paso, lo que lo hace ideal para flujos de trabajo de desarrollo y pruebas.

Conclusión

En esta guía, has aprendido cómo gestionar módulos de PowerShell: verificando importaciones e importando, eliminando y re-importando módulos. También exploraste cómo PowerShell importa módulos de manera dinámica y cómo controlar la carga para solucionar problemas o probar configuraciones personalizadas manualmente.

Ahora, aplica estas habilidades experimentando con módulos personalizados en tus scripts. Explora el desarrollo de módulos y utiliza el parámetro Force para asegurar que los cambios surtan efecto.

¡Mejora tu solución de problemas, desarrollo de scripts y flujo de trabajo general de PowerShell con módulos de PowerShell!

Source:
https://adamtheautomator.com/powershell-modules-guide-2/