Gestionar módulos de PowerShell en redes o servidores bloqueados puede ser un dolor de cabeza. Ya sabes, cuando intentas poner en funcionamiento un módulo como SQLServer o PSWindowsUpdate en un servidor sin acceso a internet y todo parece detenerte.¡Buenas noticias! Hay maneras de solucionar este problema. Esta guía te mostrará cómo instalar módulos de PowerShell sin conexión (para que no tengas que depender de internet) y también cómo importar módulos desde una máquina remota cuando sea necesario. En resumen, podrás configurar tu entorno sin preocuparte por las molestas restricciones de red. Y sí, es bastante útil cuando trabajas con entornos aislados o con políticas de TI estrictas. Tendrás los módulos adecuados disponibles justo donde los necesitas, sin importar las restricciones de red.
Cómo instalar módulos de PowerShell en computadoras sin conexión
Primero, obtenga el módulo desde una máquina conectada a Internet.
Dado que la mayoría de los módulos provienen directamente de la Galería de PowerShell ( https://www.powershellgallery.com/ ), el truco consiste en descargarlos primero en una computadora con conexión a internet. Necesitará la versión 5.1 de PowerShell o posterior, que puede comprobarse con [nombre del archivo] $PSVersionTable. PSVersion. Si es anterior, podría tener problemas de compatibilidad. Una vez confirmado, busque el módulo que desee, como SqlServer, usando:
Find-Module –Name *SqlServer* | Select Name, Version, Repository
Este comando ayuda a verificar que el módulo específico exista en la galería. Luego, descárguelo a una carpeta que recuerde, por ejemplo C:\PS:
Save-Module –Name SqlServer –Path C:\PS\
Ahora viene la parte complicada. El módulo se descarga como una carpeta con todos sus archivos, pero no necesariamente todas sus dependencias. Por lo tanto, copiar la carpeta al equipo de destino no es suficiente si no existen dependencias; a veces, el módulo necesita otros módulos o archivos para funcionar correctamente. Sin embargo, para módulos básicos, copiar la carpeta a la ruta correcta suele funcionar. Las rutas de módulo predeterminadas del sistema suelen ser:
- C:\Users\username\Documents\WindowsPowerShell\Modules – localizado para el usuario actual
- C:\Archivos de programa\WindowsPowerShell\Módulos – para todos los usuarios (requiere derechos de administrador)
- C:\Windows\system32\WindowsPowerShell\v1.0\Modules – módulos integrados
Copia la carpeta completa del módulo en C:\Archivos de programa\WindowsPowerShell\Módulos (o la carpeta del usuario si es solo para tu usuario).Después, comprueba si PowerShell detecta el módulo:
Get-Module -Name SqlServer -ListAvailable
Si el módulo aparece, está listo. Puedes listar sus comandos con:
Get-Command -Module SqlServer
De esta manera, incluso si su servidor no tiene acceso a internet ni a PowerShellGallery, tendrá el módulo listo para importar y usar sin conexión. Tenga en cuenta que algunos módulos con dependencias podrían requerir pasos adicionales o módulos precargados.
Consejo importante:
En algunas configuraciones, este método podría no funcionar a la primera, especialmente si faltan dependencias o hay una discrepancia de versiones. Reiniciar PowerShell o (a veces) el propio equipo podría ayudar a reconocer los nuevos módulos. Es un poco peculiar, pero así es Windows.
Importar un módulo de PowerShell desde una computadora remota
Omite la instalación, simplemente toma prestado el módulo de otra computadora
Si no es posible instalar el módulo localmente, puedes cargarlo directamente desde una máquina remota con PowerShell. Básicamente, creas una sesión, ves qué módulos están disponibles remotamente y luego importas los comandos necesarios. Es muy útil cuando necesitas un módulo específico ocasionalmente o cuando pruebas cosas sin alterar la configuración local.
Comience creando una nueva sesión en la máquina remota:
$session = New-PSSession -ComputerName dub-sql1
Reemplace dub-sql1 con el nombre de su sistema remoto. Una vez conectado, podrá ver qué módulos están disponibles en esa máquina con:
Get-Module -PSSession $session -ListAvailable
Si el módulo está ahí, impórtelo a su sesión actual de la siguiente manera:
Import-Module -PSSession $session -Name SqlServer
Este comando extrae todos los cmdlets del módulo SQLServer remoto a su sesión local de PowerShell. Después, puede ejecutar comandos como Invoke-Sqlcmdsi el módulo estuviera instalado localmente. No olvide cerrar la sesión después:
Remove-PSSession $session
Otro truco es usar la comunicación remota implícita si quieres que estos comandos se comporten igual que los nativos sin tener que administrar sesiones constantemente. Puedes hacerlo con:
$session = New-PSSession -ComputerName dub-sql1 Invoke-Command {Import-Module SqlServer} -Session $session Export-PSSession -Session $session -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobber Remove-PSSession $session Import-Module RemoteSQLServer
Esto configura un módulo local que se conecta a su servidor remoto detrás de escena: algo oculto, pero muy útil cuando desea ejecutar comandos del servidor SQL sin instalar nada en la máquina host.
En cualquier caso, la idea principal es que, ya sea instalación sin conexión o importación remota, estos métodos te salvan el trabajo cuando la instalación normal con conexión a internet no es posible. Es un poco más de trabajo, pero es mejor que intentar modificar dependencias rotas o esperar a que el departamento de TI abra la galería.