使用 Azure Active Directory 同步工具时,一个或多个对象无法同步

本文解决了一个或多个 Active Directory 域服务 (AD DS) 对象属性无法通过 Azure Active Directory 同步工具同步到 Azure Active Directory (Azure AD) 的问题。

原始产品版本:   云服务 (Web 角色/辅助角色) 、Azure Active Directory、Microsoft Intune、Azure 备份、Office 365 身份管理
原始 KB 编号:   2643629

症状

一个或多个 AD DS 对象或属性不会如预期同步到 Microsoft Azure AD。 Active Directory 同步运行时,对象不会同步,并且您遇到以下症状之一:

  • 您将收到一条错误消息,指出属性具有重复值。
  • 您收到一条错误消息,指出一个或多个属性违反格式要求,如字符集或字符长度。
  • 您未收到错误消息,目录同步似乎已完成。 但是,某些对象或属性不会像预期一样更新。

您可能会收到错误消息的一些示例:

同一代理地址的同步对象已存在于你的Microsoft Online Services目录中。

找不到用户 ID,因此无法更新此对象。

无法更新此对象Microsoft Online Services因为与此对象关联的以下属性具有可能已与本地目录中的另一个对象关联的值。

原因

出现此问题的原因如下之一:

  • 尚未验证 AD DS 属性使用的域值。

  • 一个或多个需要唯一值的对象属性具有重复的属性值 (如 proxyAddresses 属性或现有用户帐户中的 U serPrincipalName) 属性。

  • 一个或多个对象属性违反限制属性值的字符和字符长度的格式设置要求。

  • 一个或多个对象属性与目录同步的排除规则匹配。

    下表显示了默认同步范围规则:

    对象类型 属性名 同步失败时的属性条件
    Contact DisplayName 包含"MSOL"
    msExchHideFromAddressLists 设置为"True"
    启用安全功能的组 isCriticalSystemObject 设置为"True"
    已启用邮件的组
    (安全组或通讯组列表)
    proxyAddresses



    mail
    没有"SMTP:"地址条目



    不存在
    已启用邮件的联系人 proxyAddresses



    mail
    没有"SMTP:"地址条目



    不存在
    iNetOrgPerson sAMAccountName 不存在
    isCriticalSystemObject 存在
    用户 mailNickName 从"SystemMailbox"开始
    mailNickName 从"CAS_"开始



    包含"}"
    sAMAccountName 从"CAS_"开始



    包含"}"
    sAMAccountName 等于"SUPPORT_388945a0"
    sAMAccountName 等于"MSOL_AD_Sync"
    sAMAccountName 不存在
    isCriticalSystemObject 设置为"True"
  • 初始同步 (UPN) 更改的用户主体名称,必须手动更新。

  • Exchange Online 简单邮件传输 () 同步用户的 SMTP 地址不会在本地 Active Directory 架构中正确填充。

解决方案

若要解决此问题,请根据情况使用以下方法之一。

运行 IdFix 以检查重复项、缺少的属性和规则违反

使用 IdFix DirSync 错误修正 工具查找阻止与 Azure AD 同步的对象和错误。

  • 如果在运行 IdFix 后在 ERROR 列中看到"空白",请参阅运行 IdFix 工具后的一个或多个对象的 ERROR 列中显示"空白"。

  • 如果在运行 IdFix 后在 ERROR 列中看到"重复",请参阅:运行 IdFix工具后,"重复"显示在一个或多个对象的 ERROR 列中

确定由未通过目录同步在 Azure AD 中创建的对象导致的属性冲突

若要确定由使用管理工具 (创建且未通过目录同步策略在 Azure AD 中创建的用户对象) ,请按照以下步骤操作:

  1. 确定本地 AD DS 用户帐户的唯一属性。 为此,在安装了 Windows 支持工具的计算机上,请按照以下步骤操作:

    1. 选择 "开始",选择"运行",ldp.exe,然后选择"确定"。

    2. 选择 "连接",选择"连接",键入 AD DS 域控制器的计算机名称,然后选择"确定"。

    3. 选择 "连接",选择 " 绑定",然后选择"确定"。

    4. 选择 "视图",选择"树 视图",在 BaseDN 下拉列表中选择 AD DS 域,然后选择"确定"。

    5. 在导航窗格中,找到未正确同步的对象,然后双击该对象。 窗口右侧的详细信息窗格列出了所有对象属性。 以下示例显示对象属性:

      Windows 支持工具的导航和详细信息窗格的屏幕截图。

    6. 在多值 proxyAddresses 属性中记录 userPrincipalName 属性和每个 SMTP 地址的值。 稍后将需要这些值。

      属性名 示例 注意
      proxyAddresses proxyAddresses (3) : x500:/o=Exchange/ou=Exchange Administrative Group (FYDIBOHF23SPDLT) /cn=Recipients/cn=1ae75fca0d3a4303802cea9ca50fcd4f-7628376;smtp: 7628376@service.contoso.com ;SMTP: 7628376@contoso.com ;
      1. 属性标签旁边的括号中显示的数字指示多值属性中的代理地址值数。

      2. 每个不同的代理地址值由一个分号 (;) 。

      3. 主 SMTP 代理地址值由大写"SMTP:" 指示。
      userPrincipalName 7628376@contoso.com

      备注

      Ldp.exe Windows Server 2008 和 Windows Server 2003 支持工具中提供。 Windows Server 2003 支持工具包含在 Windows Server 2003 安装媒体中。 或者,若要获取支持工具,请转到以下 Microsoft 网站 :Windows Server 2003 Service Pack 2 32 位支持工具

  2. 使用 Azure Active Directory 模块连接到 Azure AD Windows PowerShell。 有关详细信息,请转到使用帐户管理Azure AD Windows PowerShell。

    使控制台窗口保持打开状态。 你需要在下一步中使用它。

  3. 检查重复的 userPrincipalName 属性。

    在步骤 2 中打开的控制台连接中,按显示顺序键入以下命令。 在每个命令后按 Enter:

    $userUPN = "<search UPN>"
    

    备注

    在此命令中,占位符""表示在步骤 1f 中记录的 <search UPN> UserPrincipalName 属性。

    get-MSOLUser -UserPrincipalName $userUPN | where {$_.LastDirSyncTime -eq $null}
    

    使控制台窗口保持打开状态。 你将在下一步中再次使用它。

  4. 检查重复的 proxyAddresses 属性。 在步骤 2 中打开的控制台连接中,按显示顺序键入以下命令。 在每个命令后按 Enter:

    $SessionExO = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Cred -Authentication Basic - AllowRedirection
    
    Import-PSSession $sessionExO -prefix:Cloud
    
  5. 对于在步骤 1f 中记录的每个代理地址条目,按显示顺序键入以下命令。 在每个命令后按 Enter:

    $proxyAddress = "<search proxyAddress>"
    

    备注

    在此命令中,占位符""表示在步骤 1f 中记录的 <search proxyAddress> proxyAddresses 属性的值。

    get-cloudmailbox | where {[string] $str = ($_.EmailAddresses); $str.tolower().Contains($proxyAddress.tolower()) -eq $true} | foreach {get-MSOLUser -UserPrincipalName $_.MicrosoftOnlineServicesID | where {($_.LastDirSyncTime -eq $null)}}
    

在步骤 3 和 4 中运行命令后返回的项目表示不是通过目录同步创建的且具有与未正确同步的对象冲突的属性的用户对象。

更新 AD DS 属性以删除重复项、规则违反和作用域排除项

根据以下信息标识阻止同步的特定属性:

  • 管理电子邮件
  • 来自 Office 365 部署准备工具输出的报告
  • 默认目录同步范围规则和自定义规则

标识特定属性值后,使用 Active Directory 用户和计算机工具编辑该属性值。 为此,请按照以下步骤操作:

  1. 打开"Active Directory 用户和计算机",然后选择 AD DS 域的根节点。
  2. 选择 " 视图",然后确保 选中"高级 功能"选项。
  3. 在左侧导航窗格中,找到用户对象,右键单击它,然后选择"属性"。
  4. "对象编辑器" 选项卡上,找到您需要的属性。 选择 " 编辑",然后将属性值编辑为您想要的值。
  5. 选择“确定”两次。

或者,您可以使用 ADSI (Active Directory 服务) 更新 AD DS 中的对象属性。 你可以下载 ADSI Edit 并安装作为 Windows Server Toolkit。 若要使用 ADSI 编辑编辑属性,请按照以下步骤操作。

警告

此过程需要 ADSI 编辑。 错误地使用 ADSI 编辑可能会导致严重问题,可能需要重新安装操作系统。 Microsoft 无法保证正确使用 ADSI 编辑导致的问题可以解决。 使用 ADSI 编辑的风险由你自己承担。

  1. 选择 "开始",选择"运行",键入 ADSIEdit.msc,然后选择 "确定"。
  2. 右键单击导航窗格中的 ADSI 编辑,选择"连接到",然后选择"确定"加载域分区。
  3. 找到用户对象,右键单击它,然后选择"属性"。
  4. "属性" 列表中,找到您需要的属性。 选择 " 编辑",然后将属性值编辑为您想要的值。
  5. 选择 "确定 "两次,然后退出 ADSI 编辑。

创建新组并将其添加到未同步的内置组

若要解决某些内置组 ((如域用户组) )未同步的情况,请创建一个新组,其中包含该内置组的所有适用成员和相应权限。 然后,将该组添加为未同步的内置组的成员。 使用新组而不是内置组来管理成员。 使用此方法,您仍只能管理一个组。

你不希望更改内置组的属性或更改标识同步设备范围规则以允许同步关键系统对象。 它可能会触发其他意外行为。

使用 SMTP 匹配使本地用户对象同步到现有用户对象

有关详细信息,请参阅如何使用 SMTP 匹配将本地用户帐户与 Office 365 用户帐户进行目录同步匹配

手动更新用户帐户 UPN

若要更新在初始目录同步发生后获得许可的用户帐户 UPN,请按照以下步骤操作:

  1. 安装 Azure Active Directory V2 PowerShell 模块。 有关详细信息,请参阅 Azure Active Directory V2 PowerShell 模块

  2. 在 Azure Active Directory V2 PowerShell 提示符下运行以下 cmdlet:

    $cred = get-credential
    

    备注

    系统提示时,输入管理员凭据。

    Connect-AzureAD
    
    Set-AzureADUser -ObjectId [CurrentUPN] -UserPrincipalName [NewUPN]
    

使用本地 Active Directory 属性更新用户 SMTP 地址

当 SMTP 属性未以预期方式同步到 Exchange Online 时,您可能需要更新本地 Active Directory 属性。 若要更新本地 Active Directory 属性,以便 Exchange Online 中显示正确的电子邮件地址,请使用解决方案 2 操作下表中的属性。

本地 Active Directory 属性名称 示例本地 Active Directory 属性值 示例 Exchange Online 电子邮件地址
proxyAddresses SMTP:user1@contoso.com 主 SMTP: user1@contoso.com
辅助 SMTP: user1@contoso.onmicrosoft.com
proxyAddresses smtp:user1@contoso.com 主 SMTP: user1@contoso.onmicrosoft.com 辅助 SMTP: user1@contoso.com
proxyAddresses SMTP:user1@contoso.com
smtp:user1@sub.contoso.com
主 SMTP: user1@contoso.com
辅助 SMTP: user1@sub.contoso.com
辅助 SMTP: user1@contoso.onmicrosoft.com
mail User1@contoso.com 主 SMTP: user1@contoso.com
辅助 SMTP: user1@contoso.onmicrosoft.com
UserPrincipalName User1@contoso.com 主 SMTP: user1@contoso.com
辅助 SMTP: user1@contoso.onmicrosoft.com

与默认域 ((如) )关联的 Microsoft Online 电子邮件路由地址 (MOERA) 条目是基于用户帐户别名的已解释值。 user1@contoso.onmicrosoft.com 此专业电子邮件地址与每个 Exchange Online 收件人链接不解。 无法管理、删除或创建任何收件人的其他 MOERA 地址。 但是,通过使用本地 Active Directory 用户对象中的属性,MOERA 地址可以重写为主 SMTP 地址。

备注

proxyAddresses 属性中数据的存在完全掩盖了 Exchange Online 电子邮件地址填充的邮件属性中的数据。

备注

proxyAddresses 属性、邮件属性或这两个属性中是否存在数据完全掩盖了 Exchange Online 电子邮件地址填充的 UserPrincipalName 数据。 UPN 可用于管理电子邮件地址。 但是,管理员可以决定通过填充 proxyAddresses 或邮件属性单独管理电子邮件地址和 UPN。

强烈建议一致地使用其中一个属性来管理同步用户的 Exchange Online 电子邮件地址。

更多信息

本文Windows PowerShell的命令需要使用 Azure Active Directory 模块Windows PowerShell。 有关 Azure Active Directory 模块 for Windows PowerShell,请参阅以下文章:
使用 Windows PowerShell 管理Azure AD。

有关按属性筛选目录同步详细信息,请参阅以下 Microsoft TechNet Wiki 文章:
Azure Active Directory 同步工具同步的属性列表

仍然需要帮助? 转到 Microsoft 社区Azure Active Directory 论坛网站。