Sincronizar e fundir AD local com Entra ID (Azure AD): corrigir ProxyAddresses duplicados, Soft/Hard Match e ImmutableID

Guia prático, completo e seguro para sincronizar e fundir contas do Active Directory local com identidades já existentes no Entra ID (Azure AD), corrigindo erros de proxyAddresses duplicados e unificando logon com SSO de forma previsível.

Índice

Contexto e sintomas

Ao habilitar o Azure AD Connect em modo híbrido, é comum encontrar falhas de acoplamento entre identidades locais e objetos que já existem no Microsoft 365. Um sintoma frequente é o erro:

Unable to update this object. Another object with the same value for property ProxyAddresses exists.
Exemplo: duplicate ProxyAddresses SMTP:usuario@dominio.com

Isso ocorre porque o mesmo endereço SMTP está presente na conta local (on-premises) e também em um objeto na nuvem (usuário, caixa compartilhada, sala, grupo habilitado para e-mail ou contato). O Azure AD Connect não consegue “fundir” os objetos e interrompe a sincronização desse item até que o conflito seja removido.

Visão geral da correspondência de identidades

Existem dois mecanismos para “casar” o objeto local com o objeto existente no Entra ID:

  • Soft Match: tentativa automática de correspondência baseada em UPN e/ou proxyAddresses (SMTP principal). Se o UPN e/ou o SMTP principal do usuário on‑prem coincidirem com os da conta na nuvem, a fusão é feita automaticamente.
  • Hard Match: correspondência explícita definindo o ImmutableId no objeto de nuvem para o valor derivado do anchor do AD local (por padrão, mS-DS-ConsistencyGuid e, na ausência dele, o objectGUID). É a abordagem determinística quando o Soft Match falha.

Em ambas as abordagens, cada endereço SMTP precisa ser único em todo o tenant. Se houver duplicidade, a exportação para a nuvem falhará.

Pré‑requisitos essenciais

  • Domínios verificados: todos os sufixos usados em UPN e e‑mail (ex.: @empresa.co.mz, @empresa.com.br) devem estar verificados no tenant.
  • Saúde do diretório: execute o IdFix para localizar duplicidades e valores inválidos em userPrincipalName, proxyAddresses, mail, entre outros.
  • Endereçamento consistente: defina SMTP:principal@dominio como primário (em maiúsculas) e demais aliases como smtp:alias@dominio (minúsculas). Evite caracteres especiais fora do padrão.
  • Âncora de identidade: saiba qual atributo sua instalação usa como sourceAnchor. Recomenda-se mS-DS-ConsistencyGuid; se ausente, o Azure AD Connect utiliza objectGUID.
  • Permissões e módulos: garanta privilégios para ler o AD, executar cmdlets do Azure AD Connect e usar PowerShell do Microsoft Graph.

Roteiro de remediação

EtapaAçãoComandos ou observações
Soft MatchHabilitar correspondência automática por UPN/SMTP e testar com poucos usuários.PowerShell Set-MsolDirSyncFeature -Feature EnableSoftMatchOnUpn -Enable $true Inclua a OU no escopo e force sincronização delta.
Hard MatchQuando o Soft Match não resolve: calcular o ImmutableId a partir do AD local e aplicar no usuário de nuvem.PowerShell $user = Get-ADUser "<sAMAccountName>" -Properties ObjectGUID,'mS-DS-ConsistencyGuid' if ($user.'mS-DS-ConsistencyGuid') { $guid = New-Object System.Guid (,$user.'mS-DS-ConsistencyGuid') } else { $guid = $user.ObjectGUID } $id = [Convert]::ToBase64String($guid.ToByteArray()) Set-MsolUser -UserPrincipalName user@dominio.com -ImmutableId $id Se já existir valor conflitando, zere antes: -ImmutableId $null.
Resolver duplicidadesLimpar proxyAddresses duplicados no AD local (e em objetos de nuvem quando necessário). Use IdFix.Depois de corrigir, execute sincronização delta.
Módulo modernoPreferir Microsoft Graph PowerShell no lugar do MSOnline (depreciado).PowerShell Install-Module Microsoft.Graph -Scope CurrentUser Connect-MgGraph -Scopes User.ReadWrite.All Update-MgUser -UserId user@dominio.com -OnPremisesImmutableId $id
ValidarApós o delta, conferir estado no Sync Service Manager e no portal da Microsoft.O usuário deve aparecer como origem “Windows Server AD”.

Procedimento detalhado

Soft Match com UPN e SMTP

O Soft Match tenta unir automaticamente objetos com UPN e/ou SMTP primário idênticos. Recomendações:

  1. Alinhe o UPN do AD local ao domínio de e‑mail usado no Microsoft 365.
  2. Garanta que o SMTP: primário no proxyAddresses do AD local seja o mesmo da conta de nuvem a ser fundida.
  3. Ative a função de Soft Match por UPN quando apropriado:
PowerShell
Set-MsolDirSyncFeature -Feature EnableSoftMatchOnUpn -Enable $true

Inclua a OU de teste no escopo de sincronização e force um ciclo delta:

PowerShell
Start-ADSyncSyncCycle -PolicyType Delta

Se o objeto casar, o conector irá join e a origem do usuário passará a “Windows Server AD”. Se não casar, não insista replicando a mesma tentativa; avance para Hard Match.

Hard Match com ImmutableID

Quando o Soft Match não resolve (por exemplo, múltiplos aliases diferentes, UPN divergente ou migrações prévias), utilize o Hard Match. Ele é determinístico e evita ambiguidade.

Passo a passo:

  1. Identifique o anchor usado no seu ambiente:
    • Preferencial: mS-DS-ConsistencyGuid.
    • Alternativo: objectGUID, quando o anterior não estiver definido.
  2. Calcule o ImmutableId no AD local e converta para Base64.
  3. Defina o ImmutableId no objeto de nuvem correspondente e execute um delta.

Exemplo completo em PowerShell (AD + MSOnline):

PowerShell
1) Obter o GUID de referência (mS-DS-ConsistencyGuid ou objectGUID)
$user = Get-ADUser "<sAMAccountName>" -Properties ObjectGUID,'mS-DS-ConsistencyGuid'
if ($user.'mS-DS-ConsistencyGuid') {
  $guid = New-Object System.Guid (,$user.'mS-DS-ConsistencyGuid')
} else {
  $guid = $user.ObjectGUID
}
$id = [Convert]::ToBase64String($guid.ToByteArray())

2) (opcional) limpar ImmutableId antigo na nuvem

Set-MsolUser -UserPrincipalName [user@dominio.com](mailto:user@dominio.com) -ImmutableId $null

3) aplicar o novo ImmutableId ao usuário de nuvem

Set-MsolUser -UserPrincipalName [user@dominio.com](mailto:user@dominio.com) -ImmutableId $id

4) sincronizar

Start-ADSyncSyncCycle -PolicyType Delta

Equivalente com Microsoft Graph PowerShell:

PowerShell
Requer consentimento para User.ReadWrite.All
Install-Module Microsoft.Graph -Scope CurrentUser
Connect-MgGraph -Scopes User.ReadWrite.All

Limpar e aplicar

Update-MgUser -UserId [user@dominio.com](mailto:user@dominio.com) -OnPremisesImmutableId $null
Update-MgUser -UserId [user@dominio.com](mailto:user@dominio.com) -OnPremisesImmutableId $id

Resolvendo proxyAddresses duplicados

Toda identidade habilitada para e‑mail no tenant (usuários, caixas compartilhadas/salas, grupos habilitados para e‑mail e contatos de e‑mail) compete pelo mesmo espaço de endereços. Estratégia de saneamento:

  • Mapeie duplicidades com IdFix e também com consultas no AD local para garantir que o conflito está eliminado na origem.
PowerShell
Pesquisar quem já possui um determinado SMTP
Get-ADObject -LDAPFilter "(proxyAddresses=SMTP:usuario@dominio.com)" -Properties proxyAddresses |
  Select-Object Name, ObjectClass, DistinguishedName, proxyAddresses
  • Corrija no AD local: remova ou ajuste aliases obsoletos. Lembre-se da regra de capitalização: apenas o primário em maiúsculas (SMTP:).
PowerShell
Exemplo: substituir primário e manter alias
Set-ADUser "<sAMAccountName>" -Replace @{proxyAddresses=@(
  "SMTP:principal@dominio.com",
  "smtp:alias1@dominio.com",
  "smtp:alias2@dominio.com"
)}
  • Objetos puramente de nuvem: se o conflito estiver em uma caixa ou grupo criado na nuvem, ajuste o endereço nesse objeto de nuvem para liberar o SMTP desejado.

Após alterações, dispare o delta e verifique as exportações no conector do Microsoft 365.

Validação após a sincronização

  • No Synchronization Service Manager, verifique se as etapas de Import, Synchronization e Export concluíram sem erros para o conector on‑prem e para o conector do Microsoft 365.
  • No centro de administração, o usuário deve exibir origem Windows Server AD e atributos de e‑mail/aliases vindos do AD local.
  • Faça sign‑in com o UPN corporativo para confirmar o SSO e a convergência de políticas de segurança.

Cenários especiais

  • Usuário versus contato: se existir um MailContact na nuvem usando o SMTP desejado, o usuário local não poderá exportar. Converta ou remova o contato antes.
  • Grupos habilitados para e‑mail: endereços pertencentes a Distribution Lists ou Microsoft 365 Groups também bloqueiam a exportação; ajuste-os.
  • Caixas de sala e compartilhadas: unifique os endereços, garantindo que o targetAddress e o proxyAddresses não conflitem com usuários.
  • Múltiplos florestas: verifique regras de junção do Azure AD Connect entre florestas para evitar criação duplicada do mesmo usuário a partir de fontes distintas.

Erros comuns e como corrigir

  • Duplicate ProxyAddresses: resolva a duplicidade em todas as classes de objeto. Não basta ajustar só o usuário.
  • ImmutableId em uso: ocorre se você tentar aplicar um ImmutableId que já pertence a outro objeto de nuvem. Limpe o valor no objeto antigo ($null) e repita.
  • UPN com domínio não verificado: altere o sufixo UPN no AD local para um domínio verificado antes de sincronizar.
  • Tipo de objeto divergente: se o objeto de nuvem for um Cloud‑Only com mailbox e você criou outro usuário on‑prem com o mesmo SMTP, prefira fundir via Hard Match ao invés de recriar.
  • Demora de convergência: aguarde a replicação do AD e, se necessário, execute um Initial para limpeza completa.
PowerShell
Forçar ciclo completo quando houver muitas mudanças estruturais
Start-ADSyncSyncCycle -PolicyType Initial

Boas práticas de governança

  • Padrão de nomenclatura para UPN e e‑mail alinhados a domínios oficiais da organização.
  • Controle de aliases: estabeleça processo para criar/aposentar endereços, evitando sprawl de proxyAddresses.
  • IdFix antes de cada mudança grande: execute varreduras de qualidade de dados em ondas antes de ampliar o escopo de OU.
  • Backlog de exceções: documente contas com endereços legados, apelidos históricos ou cenários de fusão de empresas.
  • Automação de verificação: scripts de auditoria que sinalizam duplicidades e diferenças entre UPN e SMTP primário.

Perguntas frequentes

Preciso que o SMTP primário seja igual ao UPN?
Não é obrigatório; porém, alinhar ambos simplifica o Soft Match e reduz erros de autenticação e comunicação.

Posso editar proxyAddresses diretamente na nuvem após habilitar a sincronização?
Evite. Com Azure AD Connect, os atributos passam a ser de origem on‑prem. Ajuste no AD local e deixe o conector exportar.

O módulo MSOnline ainda funciona?
Funciona, mas está depreciado. Prefira Microsoft Graph PowerShell para comandos de usuário e automação moderna.

Checklist rápido

  • Domínios verificados no tenant.
  • IdFix sem erros críticos.
  • UPN e SMTP primário alinhados quando possível.
  • Nenhum proxyAddresses duplicado.
  • Soft Match ativado e testado com poucos usuários.
  • Hard Match aplicado quando necessário, usando mS-DS-ConsistencyGuid ou objectGUID.
  • Delta ou Initial executado e validado sem erros no Sync Service.

Modelos de script

Função para calcular o ImmutableId a partir do AD

PowerShell
function Get-ImmutableIdFromAD {
  param(
    [Parameter(Mandatory)] [string] $SamAccountName
  )
  $u = Get-ADUser $SamAccountName -Properties ObjectGUID,'mS-DS-ConsistencyGuid'
  if ($u.'mS-DS-ConsistencyGuid') {
    $g = New-Object System.Guid (,$u.'mS-DS-ConsistencyGuid')
  } else {
    $g = $u.ObjectGUID
  }
  return [Convert]::ToBase64String($g.ToByteArray())
}

Uso:

$id = Get-ImmutableIdFromAD -SamAccountName "jdoe"
$id

Aplicar Hard Match em lote

PowerShell
CSV com colunas: SamAccountName, UserPrincipalName
$users = Import-Csv .\HardMatch.csv
foreach ($row in $users) {
  $id = Get-ImmutableIdFromAD -SamAccountName $row.SamAccountName
  # Limpar e aplicar via Graph
  Update-MgUser -UserId $row.UserPrincipalName -OnPremisesImmutableId $null
  Update-MgUser -UserId $row.UserPrincipalName -OnPremisesImmutableId $id
}
Start-ADSyncSyncCycle -PolicyType Delta

Exemplo de sessão completa

PowerShell
1) Pré-checagem
Import-Module ActiveDirectory
Get-ADUser "maria.silva" -Properties mail,proxyAddresses,userPrincipalName |
  Select-Object userPrincipalName, mail, proxyAddresses

2) Corrigir proxyAddresses no AD local

Set-ADUser "maria.silva" -Replace @{proxyAddresses=@(
"SMTP:maria[.silva@empresa.com](mailto:.silva@empresa.com)",
"smtp:maria@empresa.com"
)}

3) Habilitar Soft Match por UPN (opcional)

Set-MsolDirSyncFeature -Feature EnableSoftMatchOnUpn -Enable $true

4) Tentar Soft Match

Start-ADSyncSyncCycle -PolicyType Delta

5) Se não casar, Hard Match

$id = Get-ImmutableIdFromAD -SamAccountName "maria.silva"
Set-MsolUser -UserPrincipalName [maria.silva@empresa.com](mailto:maria.silva@empresa.com) -ImmutableId $null
Set-MsolUser -UserPrincipalName [maria.silva@empresa.com](mailto:maria.silva@empresa.com) -ImmutableId $id

6) Sincronizar e validar

Start-ADSyncSyncCycle -PolicyType Delta

Conferir no Sync Service Manager e no portal que a origem é "Windows Server AD"

Dicas finais

  1. Execute o IdFix antes de ligar a sincronização para reduzir drasticamente erros de exportação.
  2. Lembre da capitalização: SMTP: para o primário; smtp: para aliases.
  3. Padronize domínios e verifique seu status no tenant antes de iniciar qualquer fusão.
  4. Siga uma ordem segura: corrigir atributos on‑prem → habilitar Soft Match → testar um usuário → ampliar escopo de OU.
  5. Nos ajustes finais, dispare Start-ADSyncSyncCycle -PolicyType Delta e valide resultados.

Aplicando esse roteiro, as contas do AD local serão associadas corretamente às identidades existentes no Entra ID, viabilizando SSO, governança centralizada e redução de incidentes em operações de identidade.

Índice