PowerShell Active Directory offline: como importar o módulo sem Internet (RSAT, SxS e FoD)

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.

Índice

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

PassoO que fazerPor que é necessárioComando/Exemplo
Copiar a pasta completa do móduloNo 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 reconhecidoNo 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óduloImporte 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"
ConfirmarValide 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/ComportamentoCausa provávelCorreção
Import-Module : The system cannot find the file specifiedCopiou 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 serverSem 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 signedPolí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 aparecemFaltam 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)

  1. Abra uma consola elevada (Administrador).
  2. 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
  3. Transfira o ZIP por um meio autorizado no ambiente: USB aprovado, mídia óptica ou canal controlado.

No Servidor Membro (destino, offline)

  1. Crie (se necessário) o diretório de módulos global: New-Item -ItemType Directory -Path "C:\Program Files\WindowsPowerShell\Modules" -Force | Out-Null
  2. Extraia o módulo: Expand-Archive -Path "E:\ActiveDirectory.zip" ` -DestinationPath "C:\Program Files\WindowsPowerShell\Modules" -Force
  3. Confirme: Get-ChildItem "C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory" -Recurse | Select-Object -First 5
  4. 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 (preferencialmente Program Files\WindowsPowerShell\Modules).
  • Importe com Import‑Module ActiveDirectory e valide com Get-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.

Índice