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”.
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
- 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. - Abre PowerShell como administrador y ejecuta:
Install-WindowsFeature RSAT-AD-PowerShell -Source X:\sources\sxs
- 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.
- Monta el ISO de Features on Demand.
- Instala la capacidad con DISM:
DISM /Online /Add-Capability /CapabilityName:Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 /Source:X:\FoD\ /LimitAccess
- 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
oes-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 ensambladoMicrosoft.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íntoma | Causa probable | Acción recomendada |
---|---|---|
“The system can’t find the file specified” al importar | Copia parcial del módulo o rutas fuera de PSModulePath | Copiar 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 incorrecto | Revisar $env:PSModulePath y el nombre ActiveDirectory |
“Could not load file or assembly Microsoft.ActiveDirectory.Management” | Arquitectura inconsistente o falta de *.resources.dll | Usar consola de sesenta y cuatro bits y copiar subcarpetas de idioma |
“Assembly with same identity already loaded” | Duplicado en varias rutas | Evitar múltiples copias en distintas rutas del mismo módulo |
“The server is not operational” al ejecutar cmdlets | Sin comunicación hacia el controlador de dominio | Validar DNS, conectividad y credenciales |
Importación funciona en consola clásica pero no en pwsh | Incompatibilidad de edición | Usar -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.