Importar módulo Active Directory en PowerShell sin Internet: instalación offline y copia correcta

Guía completa para cargar el módulo de Active Directory en PowerShell sin conexión a Internet. Aprende a instalarlo desde medios locales o a copiar el módulo correctamente para evitar el error “The system can’t find the file specified”.

Índice

Resumen de la pregunta

En un servidor miembro sin acceso a Internet se desea usar los cmdlets de Active Directory de PowerShell. Copiar solo los DLL desde un controlador de dominio y ejecutar Import-Module falla con “The system can’t find the file specified” al intentar resolver Microsoft.ActiveDirectory.Management. ¿Cómo cargar el módulo de forma manual y sin conexión?

Respuesta rápida

Idea clave: no copies únicamente los DLL. El módulo necesita su carpeta completa (manifiesto .psd1, ensamblados y subcarpetas de recursos) o, mejor aún, instalar el componente oficial desde medios locales. A continuación tienes dos caminos seguros.

Opción recomendada: instalar desde medios locales

La instalación desde el medio de sistema garantiza dependencias, rutas y manifiestos correctos. No requiere Internet si usas el ISO del sistema o los orígenes SxS o de Features on Demand.

Servidor con sistema operativo de la familia Windows Server

  1. Monta el ISO del sistema correspondiente a la misma compilación del servidor o ubica la ruta \sources\sxs en un recurso local o de red.
  2. Abre PowerShell como administrador y ejecuta: Install-WindowsFeature RSAT-AD-PowerShell -Source X:\sources\sxs
  3. Carga y valida: Import-Module ActiveDirectory Get-Module -ListAvailable ActiveDirectory Get-Command -Module ActiveDirectory

Consejo: si tu organización usa una directiva para orígenes alternativos, puedes definir una ruta compartida con los archivos de SxS. Esto evita especificar -Source cada vez.

Equipo cliente con sistema operativo de escritorio

En equipos cliente modernos, las herramientas de administración remota son Features on Demand y pueden instalarse desde el ISO de capacidades sin necesidad de Internet.

  1. Monta el ISO de Features on Demand.
  2. Instala la capacidad con DISM: DISM /Online /Add-Capability /CapabilityName:Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 /Source:X:\FoD\ /LimitAccess
  3. Importa el módulo: Import-Module ActiveDirectory

Ventaja de esta opción: resuelve automáticamente dependencias y rutas; es la vía más estable para producción.

Opción alternativa: copiar el módulo completo de forma manual

Si no es posible instalar características, copia la carpeta completa del módulo desde una máquina compatible donde funcione.

Requisitos previos

  • Mismo idioma, edición y arquitectura entre origen y destino.
  • Consola PowerShell de sesenta y cuatro bits para evitar discrepancias con ensamblados.
  • Permisos de administrador para copiar a rutas del sistema y ajustar variables de entorno si es necesario.

Ubicación del módulo en el equipo de origen

En el equipo donde ya funciona el módulo (por ejemplo, un controlador de dominio), copia esta carpeta completa:

%SystemRoot%\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory\

Dentro encontrarás, entre otros:

  • ActiveDirectory.psd1 (manifiesto del módulo)
  • Microsoft.ActiveDirectory.Management.dll
  • Subcarpetas de recursos como en-US o es-ES con *.resources.dll

Destino recomendado en el servidor

Pega la carpeta copiada en una ruta incluida en PSModulePath. Para comprobar las rutas vigentes:

$env:PSModulePath -split ';'

Un destino universal y limpio:

C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\

Mantén exactamente la misma estructura de subcarpetas y archivos.

Importación y validación

Import-Module ActiveDirectory -Force
Get-Module -ListAvailable ActiveDirectory
Get-Command -Module ActiveDirectory

Si el nombre corto falla por rutas, importa apuntando al manifiesto:

Import-Module 'C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\ActiveDirectory.psd1' -Force

Automatización con script de copia controlada

Ejemplo que copia desde un recurso compartido, verifica integridad y carga el módulo:

$Source = '\\filesrv\infra\Modules\ActiveDirectory'
$Target = 'C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory'

Crear destino si no existe

if (-not (Test-Path \$Target)) { New-Item -ItemType Directory -Path \$Target -Force | Out-Null }

Copiar todo el árbol preservando hora y atributos

Robocopy \$Source \$Target /E /COPYALL /R:2 /W:2 | Out-Null

Comprobaciones mínimas

\$manifest = Join-Path \$Target 'ActiveDirectory.psd1'
\$dll      = Join-Path \$Target 'Microsoft.ActiveDirectory.Management.dll'
if (-not (Test-Path \$manifest) -or -not (Test-Path \$dll)) {
throw 'Copia incompleta: faltan el manifiesto o el ensamblado principal.'
}

Importar

Import-Module \$manifest -Force -Verbose

Prueba funcional rápida

try {
Get-ADDomain | Out-Null
Write-Host 'Módulo ActiveDirectory cargado y funcional.'
} catch {
Write-Warning 'El módulo está cargado, pero no se pudo contactar con el servicio de AD. Verifica conectividad y permisos.'
}

Diagnóstico: por qué falla al copiar solo ensamblados

El manifiesto ActiveDirectory.psd1 declara dependencias y rutas relativas a su propia carpeta. Al copiar solo Microsoft.ActiveDirectory.Management.dll, se rompen varias resoluciones: carga de ensamblados satélite según cultura, localización de archivos de ayuda, rutas a funciones auxiliares y validaciones internas del manifiesto. Por eso aparece “The system can’t find the file specified”. La solución es respetar la estructura completa del módulo o instalarlo desde el medio oficial.

Comprobaciones esenciales antes de importar

  • Nombre correcto del módulo: importa ActiveDirectory, no el ensamblado Microsoft.ActiveDirectory.Management. El manifiesto ya resuelve el DLL por ti.
  • Arquitectura de proceso: confirma que usas consola de sesenta y cuatro bits. [Environment]::Is64BitProcess
  • Edición de PowerShell: en Windows PowerShell clásico no necesitas compatibilidad adicional; en pwsh moderno usa compatibilidad. $PSVersionTable.PSEdition
  • Rutas de módulos: verifica que el destino está en PSModulePath. $env:PSModulePath -split ';' | ForEach-Object { Write-Host $_ }
  • Permisos y desbloqueo: copia con una cuenta administrativa y evita atributos de bloqueo en archivos que provengan de descargas.
  • Idioma coherente: asegúrate de incluir la subcarpeta de idioma que corresponda a tu instalación (es-ES, en-US, etc.).

Compatibilidad con pwsh moderno

El módulo de Active Directory es de la edición clásica de Windows PowerShell. En pwsh, cárgalo en modo de compatibilidad:

Import-Module ActiveDirectory -UseWindowsPowerShell

Esto crea una sesión bajo el motor clásico para exponer los cmdlets en tu consola actual. Asegúrate de tener el módulo instalado en el entorno de Windows PowerShell del equipo.

Validación funcional del entorno

Una vez importado, comprueba conectividad con servicios de directorio:

Get-ADDomain
Get-ADForest
Get-ADUser -Filter * -ResultSetSize 1 | Format-List Name,SamAccountName,Enabled

Ten en cuenta que “sin Internet” no implica “sin red corporativa”. Los cmdlets consultan los controladores de dominio mediante los servicios web de Active Directory. Si el servidor no puede comunicarse con el controlador, verás errores como “The server is not operational”.

Tabla de problemas frecuentes y soluciones

Mensaje o síntomaCausa probableAcción recomendada
“The system can’t find the file specified” al importarCopia parcial del módulo o rutas fuera de PSModulePathCopiar la carpeta completa y ubicarla en Program Files\WindowsPowerShell\Modules; importar vía .psd1
“The specified module ‘ActiveDirectory’ was not loaded because no valid module file was found”Ruta no incluida o nombre incorrectoRevisar $env:PSModulePath y el nombre ActiveDirectory
“Could not load file or assembly Microsoft.ActiveDirectory.Management”Arquitectura inconsistente o falta de *.resources.dllUsar consola de sesenta y cuatro bits y copiar subcarpetas de idioma
“Assembly with same identity already loaded”Duplicado en varias rutasEvitar múltiples copias en distintas rutas del mismo módulo
“The server is not operational” al ejecutar cmdletsSin comunicación hacia el controlador de dominioValidar DNS, conectividad y credenciales
Importación funciona en consola clásica pero no en pwshIncompatibilidad de ediciónUsar -UseWindowsPowerShell en pwsh

Procedimientos adicionales con DISM y orígenes alternativos

Además del comando de instalación, puedes usar DISM con una imagen de origen concreta del medio de instalación, útil si administras varias ediciones desde una misma ISO con WIM que contiene varias imágenes:

DISM /Online /Enable-Feature /FeatureName:Rsat.ActiveDirectory /All /Source:WIM:X:\sources\install.wim:Index /LimitAccess

Adapta el índice a la edición correspondiente. Si usas directivas, establece una ruta compartida con los archivos de origen para reparaciones de componentes y futuras instalaciones sin Internet.

Buenas prácticas en entornos sin Internet

  • Mantén un repositorio interno con las carpetas SxS y el ISO de Features on Demand.
  • Estandariza la arquitectura de los servidores y su idioma para simplificar copias de módulos.
  • Versiona y etiqueta los módulos copiados, incluyendo su hash de integridad.
  • Automatiza la verificación con tareas desatendidas que validen comandos básicos de directorio.

Checklist de verificación rápida

  • Consola de sesenta y cuatro bits abierta como administrador.
  • Origen y destino con idioma y compilación coherentes.
  • Carpeta completa del módulo presente y en ruta de módulos.
  • Importación mediante nombre o manifiesto validada.
  • Cmdlets de prueba ejecutándose con éxito.

Preguntas frecuentes

¿Puedo usar solo el ensamblado principal si apunto con ruta absoluta?
No es recomendable: el manifiesto controla dependencias y localizaciones. Cargar solo el ensamblado rompe recursos y produce errores intermitentes.

¿Funciona en una consola de treinta y dos bits?
No. Usa siempre la consola de sesenta y cuatro bits para los cmdlets de Active Directory.

¿Necesito conectividad externa?
No. Requieres únicamente conectividad hacia los controladores de dominio de tu red.

¿Qué ocurre en equipos con pwsh moderno?
Importa con compatibilidad para usar el motor clásico, mantenido por el sistema.

Apéndice con comandos útiles

Listar módulos disponibles:

Get-Module -ListAvailable | Sort-Object Name | Select-Object Name,Version,Path

Ver variable de rutas:

$env:PSModulePath -split ';' | ForEach-Object { "Ruta: $_" }

Calcular hash de integridad del manifiesto y ensamblado:

$m = 'C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\ActiveDirectory.psd1'
$d = 'C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\Microsoft.ActiveDirectory.Management.dll'
Get-FileHash $m, $d | Format-Table Algorithm, Hash, Path

Probar importación con detalles de carga:

Import-Module ActiveDirectory -Force -Verbose

Explorar comandos del módulo:

Get-Command -Module ActiveDirectory | Sort-Object Name

Resumen operativo

Para cargar el módulo de Active Directory en un entorno sin Internet, instala el componente de forma local desde medios del sistema o copia la carpeta completa del módulo a un directorio incluido en PSModulePath y luego importa con Import-Module ActiveDirectory. Copiar solo DLLs no es suficiente y conduce a errores de carga.

Conclusión

La forma más robusta y repetible en servidores y equipos de administración es usar los medios locales del sistema o de capacidades bajo demanda. Cuando no sea viable, una copia fiel de la carpeta del módulo —respetando arquitectura, idioma y estructura— resuelve el problema. Con los pasos y comprobaciones de esta guía podrás evitar el error “The system can’t find the file specified” y estandarizar la carga del módulo en entornos sin conexión.


Una línea: Instala desde medios locales o copia la carpeta completa del módulo a una ruta de PSModulePath y ejecuta Import-Module ActiveDirectory; copiar solo DLLs nunca basta.


Índice