Guia completo e prático para usar os cmdlets de Active Directory num servidor sem Internet. Veja como copiar o módulo corretamente, onde colocá‑lo, validar dependências, resolver erros comuns e, quando disponível, instalar via mídia local (RSAT/FoD) — tudo pensado para ambientes isolados.
Visão geral do problema
Em ambientes isolados (sem acesso à Internet), é comum precisar do Active Directory Module for Windows PowerShell num servidor membro para tarefas de administração (consultas LDAP, gestão de contas, grupos, GPOs, etc.). Uma tentativa frequente — e que falha — é copiar apenas as DLLs Microsoft.ActiveDirectory.Management.dll
e Microsoft.ActiveDirectory.Management.resources.dll
do Controlador de Domínio (DC) e executar Import-Module Microsoft.ActiveDirectory.Management
. O resultado típico é o erro “The system cannot find the file specified”.
Esse erro ocorre porque o PowerShell não carrega DLLs isoladamente como módulo. O módulo ActiveDirectory
possui um manifesto (ActiveDirectory.psd1
) que referencia o binário (RootModule
), define dependências, ajuda, formatação (*.format.ps1xml
) e cultura. Sem a estrutura completa da pasta e sem colocá‑la num caminho reconhecido, o Import‑Module
falha.
Resposta rápida
Copie a pasta completa ActiveDirectory
do DC para um diretório listado em $env:PSModulePath
no servidor offline e importe:
Import-Module ActiveDirectory
PowerShell 7+ (se disponível):
Import-Module ActiveDirectory -UseWindowsPowerShell
Quando houver mídia local (ISO / repositório de origem), prefira a instalação oficial do recurso RSAT a partir dos ficheiros de origem. Detalhes abaixo.
Passo a passo essencial
Passo | O que fazer | Por que é necessário | Comando/Exemplo |
---|---|---|---|
Copiar a pasta completa do módulo | No DC, copie C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory por completo (inclui ActiveDirectory.psd1 , *.format.ps1xml , DLLs e subpastas de ajuda/idioma). | O manifesto referencia binários e formatação. Sem ele (e a estrutura), o Import‑Module não encontra os alvos. | Compress-Archive ` -Path "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory" ` -DestinationPath "C:\Temp\ActiveDirectory.zip" -Force |
Colocar num caminho reconhecido | No servidor destino, selecione um diretório da variável PSModulePath e extraia a pasta ActiveDirectory lá dentro. | O PowerShell procura módulos automaticamente nestes caminhos. | $env:PSModulePath -split ';' Expand-Archive E:\ActiveDirectory.zip ` -DestinationPath "C:\Program Files\WindowsPowerShell\Modules" -Force |
Importar o módulo | Importe pelo nome ou pelo caminho do .psd1 . | Garante análise do manifesto e carregamento das DLLs. | Import-Module ActiveDirectory ou Import-Module "C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\ActiveDirectory.psd1" |
Confirmar | Valide se o módulo está disponível e carregável. | Evita “surpresas” em produção. | Get-Module -ListAvailable ActiveDirectory Get-Command -Module ActiveDirectory | Select-Object -First 5 |
Garantir pré‑requisitos | .NET e PowerShell compatíveis; permissões administrativas; conetividade para um DC (se for usar cmdlets que consultam o AD). | Evita erros de runtime e acesso. | $PSVersionTable [Environment]::Version Test-NetConnection DC01 -Port 9389 # AD Web Services |
Onde colocar a pasta do módulo
Os caminhos suportados variam por arquitetura e contexto. Use 64 bits sempre que possível (o módulo de AD é nativo x64):
- Por utilizador:
%UserProfile%\Documents\WindowsPowerShell\Modules
- Global (recomendado):
C:\Program Files\WindowsPowerShell\Modules
- Sistema (legado):
C:\Windows\System32\WindowsPowerShell\v1.0\Modules
Confirme os diretórios reconhecidos no servidor destino:
$env:PSModulePath -split ';'
Se precisar acrescentar um diretório de módulos persistente (com cautela para não duplicar):
$new = ($env:PSModulePath + ";C:\Program Files\WindowsPowerShell\Modules") `
-split ';' | Select-Object -Unique | Where-Object { $_ } | -join ';'
[Environment]::SetEnvironmentVariable('PSModulePath', $new, 'Machine')
Compatibilidade: PowerShell 5.1 vs PowerShell 7+
- Windows PowerShell 5.1: é o ambiente nativo do módulo de AD. Basta importar com
Import-Module ActiveDirectory
. - PowerShell 7+: o módulo é “Windows‑only”. Em muitos cenários é necessário invocar a compatibilidade com a edição Windows PowerShell:
# Em PowerShell 7+: Import-Module ActiveDirectory -UseWindowsPowerShell
Se a opção não estiver disponível na sua compilação, execute a sessão em Windows PowerShell 5.1 para usar o módulo no ambiente offline.
Validação funcional mínima
Depois de importar, faça um “smoke test” rápido:
# Quem sou eu no domínio?
(Get-ADDomain).DNSRoot
Teste de leitura (não destrutivo)
Get-ADUser -Filter \* -ResultSetSize 1 | Format-List Name,SID,Enabled
Teste de conectividade ao DC alvo (substitua DC01):
Test-NetConnection DC01 -Port 9389 # Active Directory Web Services
Erros comuns e como resolver
Mensagem/Comportamento | Causa provável | Correção |
---|---|---|
Import-Module : The system cannot find the file specified | Copiou só as DLLs; faltam manifesto e estrutura de pastas. | Copie toda a pasta ActiveDirectory do DC, mantendo a hierarquia. |
Get-ADUser : Unable to contact the server | Sem conectividade ao DC/AD WS (porta 9389), firewall, DNS incorreto. | Teste com Test-NetConnection <DC> -Port 9389 , verifique DNS e firewall. |
Importa no PowerShell x86 mas falha no x64 (ou vice‑versa) | Arquiteturas diferentes; caminhos de módulo distintos. | Use sempre a consola x64 e instale no caminho global (Program Files ). |
Import-Module : File <*.psd1> is not digitally signed | Política de execução restritiva e origem marcada. | Execute na sessão atual: Set-ExecutionPolicy -Scope Process RemoteSigned . Se copiou por USB, Unblock-File nos ficheiros. |
Carrega mas alguns cmdlets não aparecem | Faltam ficheiros de formatação/ajuda ou versão incompatível. | Confirme que a cópia incluiu *.format.ps1xml e subpastas. Verifique $PSVersionTable . |
Procedimento detalhado de cópia “offline”
No Controlador de Domínio (origem)
- Abra uma consola elevada (Administrador).
- Comprima a pasta do módulo:
$src = "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory" $zip = "C:\Temp\ActiveDirectory.zip" Compress-Archive -Path $src -DestinationPath $zip -Force
- Transfira o ZIP por um meio autorizado no ambiente: USB aprovado, mídia óptica ou canal controlado.
No Servidor Membro (destino, offline)
- Crie (se necessário) o diretório de módulos global:
New-Item -ItemType Directory -Path "C:\Program Files\WindowsPowerShell\Modules" -Force | Out-Null
- Extraia o módulo:
Expand-Archive -Path "E:\ActiveDirectory.zip" ` -DestinationPath "C:\Program Files\WindowsPowerShell\Modules" -Force
- Confirme:
Get-ChildItem "C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory" -Recurse | Select-Object -First 5
- Importe e teste:
Import-Module ActiveDirectory Get-ADForest | Select-Object Name,Domains
Alternativa suportada: instalar via mídia local
Se tiver acesso ao ISO/repositório de origem (sem Internet), é preferível instalar os recursos RSAT a partir de ficheiros oficiais. Existem dois cenários:
Windows Server (2012 R2, 2016, 2019, 2022)
Monte a ISO correspondente ao mesmo build do sistema e aponte para \Sources\SxS
:
Install-WindowsFeature RSAT-AD-PowerShell -Source X:\Sources\SxS
(Alias em versões mais antigas: Add-WindowsFeature)
Dica: em servidores com política de atualização restrita, adicione -LimitAccess
para evitar tentativas de contactar fontes externas.
Windows 10/11 (RSAT como Feature on Demand)
No Windows 10/11 (a partir da 1809), o RSAT é instalado como Capacidade do Windows. Para ambientes offline, utilize a ISO de Features on Demand (FoD) correspondente à versão do Windows e aponte o -Source
para o repositório FoD montado.
# PowerShell
Add-WindowsCapability -Online `
-Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0" `
-Source "D:\FoD" -LimitAccess
DISM (equivalente)
DISM /Online /Add-Capability\:Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 ^
/Source\:D:\FoD /LimitAccess
Notas importantes: o caminho D:\FoD
deve apontar para a árvore do FoD (não para \Sources\SxS
do Windows Server). Use mídia que corresponda ao exato build/idioma do Windows para evitar falhas de correspondência.
Boas práticas de segurança e manutenção
- Integridade dos ficheiros: copie o conteúdo a partir de fontes confiáveis do seu domínio. Em ambientes de alta segurança, registe hashes do ZIP antes e depois da transferência.
- Registo de atividades: mantenha um log de quem exportou e quem importou o módulo, datas e versões.
- Controle de versões: alinhe a versão do módulo com a família de SO (ex.: não misture ficheiros de um Server 2008 R2 com Server 2022).
- Arquitetura: padronize o uso de consola x64 para evitar inconsistências de
PSModulePath
.
Checklist de pré‑requisitos
- Conta com privilégios administrativos no servidor destino.
- PowerShell 5.1 disponível (para cenários com AD tradicional); PowerShell 7+ opcional com
-UseWindowsPowerShell
. - .NET Framework compatível com a origem (ver
$PSVersionTable
e[Environment]::Version
). - Conectividade interna ao DC (porta 9389 para AD Web Services, DNS correto).
Script reutilizável para copiar e instalar
Se o seu processo permitir, use este script para exportar do DC e instalar no destino. Ajuste caminhos/letras de unidade conforme o seu fluxo de transporte (USB, partilha, etc.).
# Exportar no DC
$Src = "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory"
$Zip = "C:\Temp\ActiveDirectory.zip"
if (-not (Test-Path $Src)) { throw "Pasta do módulo não encontrada: $Src" }
Compress-Archive -Path $Src -DestinationPath $Zip -Force
Write-Host "Exportado para $Zip"
--- Transferência offline manual do ficheiro ZIP para o servidor destino ---
Instalar no servidor destino
\$DstRoot = "C:\Program Files\WindowsPowerShell\Modules"
\$Dst = Join-Path \$DstRoot "ActiveDirectory"
New-Item -ItemType Directory -Path \$DstRoot -Force | Out-Null
Expand-Archive -Path "E:\ActiveDirectory.zip" -DestinationPath \$DstRoot -Force
if (-not (Test-Path \$Dst)) { throw "Falha ao expandir módulo para \$DstRoot" }
Importar e testar
Import-Module ActiveDirectory -ErrorAction Stop
Get-ADDomain | Select-Object Name,DomainControllersContainer
Perguntas frequentes (FAQ)
Preciso reiniciar o servidor após copiar o módulo?
Não. O módulo é carregado por sessão. Abra uma nova sessão se a variável PSModulePath
foi alterada.
Posso usar apenas Add-Type
para carregar a DLL?
Não recomendado. Você perde formatação, ajuda e, sobretudo, o manifesto que guia o carregamento correto. Use o módulo completo.
Funciona sem AD Web Services?
Os cmdlets do módulo comunicam com o serviço (ADWS) no DC (porta 9389). Em domínios modernos ele já existe. Verifique serviço/porta e firewall.
Como remover o módulo instalado manualmente?
Elimine a pasta ActiveDirectory
do diretório de módulos (requer permissões). Se instalado via RSAT, desinstale a capacidade/feature correspondente.
Resumo e boas práticas finais
- Copie toda a pasta
ActiveDirectory
do DC — não só as DLLs. - Coloque a pasta num caminho de
PSModulePath
(preferencialmenteProgram Files\WindowsPowerShell\Modules
). - Importe com
Import‑Module ActiveDirectory
e valide comGet-Module
/Get-Command
. - Assegure compatibilidade de .NET/PowerShell e conectividade ao DC (ADWS).
- Se existir mídia local, prefira instalar via RSAT/FoD para uma solução suportada e íntegra.
Exemplos prontos para copiar
Importar pelo caminho absoluto do manifesto
Import-Module "C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\ActiveDirectory.psd1"
Descobrir o caminho do módulo em um DC
(Get-Module ActiveDirectory -ListAvailable).ModuleBase
Verificar rapidamente as versões
$PSVersionTable
(Get-Item "C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory\ActiveDirectory.psd1").VersionInfo
Conclusão
Em ambientes sem Internet, a forma mais rápida de habilitar os cmdlets de AD é transportar o módulo completo do DC para o servidor offline e importá‑lo a partir de um diretório do PSModulePath
. Garanta compatibilidades (SO, .NET, arquitetura, PowerShell) e valide a conectividade com o DC. Se a sua organização disponibiliza mídia local, a instalação RSAT/FoD a partir de fonte confiável oferece a abordagem mais suportada e transparente para auditoria e manutenção.