重复或无效的属性会阻止 Microsoft 365 中的目录同步

症状

在 Microsoft 365 中,当目录同步完成时,管理员会收到以下电子邮件警告:

From: [MSOnlineServicesTeam@MicrosoftOnline.com](mailto:msonlineservicesteam@microsoftonline.com)Subject: Directory Synchronization Error Report

电子邮件中的错误报告可能包含以下一个或多个错误消息:

  • Microsoft Online Services 目录中已存在具有相同代理地址的同步对象。
  • 无法更新此对象,因为找不到用户 ID。
  • 无法在 Microsoft Online Services 中更新此对象,因为与此对象关联的以下属性具有可能已与本地目录中的另一个对象关联的值。
  • 无法更新此对象,因为与此对象关联的以下属性具有可能已与本地目录服务中的另一个对象关联的值:[UserPrincipalName john@contoso.com;]。 更正或删除本地目录中的重复值。
  • 无法更新此对象,因为与此对象关联的以下属性具有可能已与本地目录服务中的另一个对象关联的值:[ProxyAddresses SMTP:john@contoso.com;]。 更正或删除本地目录中的重复值。

此外,如果运行 Microsoft Entra ID (Connect) 同步服务,则会在应用程序登录事件查看器中记录包含以下错误消息之一的事件 ID 6941 实例:

Event ID: 6941
Log Name: Application
Source: ADSync
Level: Error
Details:
ECMA2 MA export run caused an error. 

Error Name: AttributeValueMustBeUnique
Error Detail: Unable to update this object because the following attributes associated with this object have values that may already be associated with another object in your local directory services: [UserPrincipalName john@contoso.com;]. Correct or remove the duplicate values in your local directory. Please refer to https://support.microsoft.com/kb/2647098 for more information on identifying objects with duplicate attribute values.
Event ID: 6941
Log Name: Application
Source: ADSync
Level: Error
Details:
ECMA2 MA export run caused an error.

Error Name: InvalidSoftMatch
Error Detail: Unable to update this object because the following attributes associated with this object have values that may already be associated with another object in your local directory services: [ProxyAddresses SMTP:john@contoso.com;]. Correct or remove the duplicate values in your local directory.

原因

如果 本地 Active Directory 域服务 (AD DS) 架构中的用户对象具有重复或无效的别名值,并且这些用户对象在目录同步期间未正确从 AD DS 架构同步到 Microsoft 365,则可能会出现此问题。

Microsoft 365 中的所有别名值对于给定组织必须是唯一的。 即使简单邮件传输协议 (SMTP) 地址中的 at 符号 (@) 后有多个唯一后缀,所有别名值也必须是唯一的。

在本地环境中,只要基于 SMTP 地址中 at sign (@) 后的后缀,别名值就相同。

如果在 Microsoft 365 的云中创建具有重复别名值的对象,为了使别名唯一,一个别名后面追加了一个唯一编号。 (例如,如果重复的别名值为“Albert”,则其中一个别名值将自动变为“Albert2”。如果已使用“Albert2”,则别名将变为“Albert3”,依此类 ) 但是,如果在本地 AD DS 中创建具有重复别名值的对象,则目录同步运行时会发生对象冲突,并且对象同步失败。

解决方案

若要解决此问题,请确定与其他 AD DS 对象冲突的重复值和值。 为此,请使用以下方法之一。

方法 1:使用 IdFix Microsoft Entra同步工具错误修正工具

使用 IdFix Microsoft Entra同步工具错误修正工具识别重复或无效属性。 若要使用 IdFix 工具解析重复属性,请参阅以下 Microsoft 知识库文章:

运行 IdFix 工具后,2857385“重复”显示在两个或更多对象的“错误”列中

方法 2:将现有本地用户映射到Microsoft Entra用户

为此,请参阅以下 Microsoft 知识库文章:

2641663 如何使用 SMTP 匹配将本地用户帐户与 Microsoft 365 用户帐户进行目录同步

方法 3:确定不是通过目录同步在 Microsoft Entra ID 中创建的对象引起的属性冲突

若要确定由 (使用 Microsoft 365 管理工具创建的用户对象引起的、未通过目录同步) 在 Microsoft Entra ID 中创建的用户对象的属性冲突,请执行以下步骤:

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

    1. 单击 “开始”,单击“ 运行”,键入“ldp.exe”,然后单击“ 确定”。

    2. 单击“ 连接”,单击“ 连接”,键入 AD DS 域控制器的计算机名称,然后单击“ 确定”。

    3. 依次单击“ 连接”、“ 绑定”和“ 确定”。

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

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

      屏幕截图显示了对象属性的示例。

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

      属性名 示例 注意
      proxyAddresses proxyAddresses (3) :x500:/o=Exchange/ou=Exchange 管理组 (GroupName) /cn=Recipients/cn=GUID;smtp:7628376@service.contoso.com;SMTP:7628376@contoso.com; 属性标签旁边的括号中显示的数字指示多值属性中的代理地址值的数目。 每个不同的代理地址值由分号 (;) 指示。 主 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. 使用用于Windows PowerShell的 Azure Active Directory 模块连接到 Microsoft 365。 为此,请执行以下步骤:

    1. 依次单击“开始”、“所有程序”、“Microsoft Entra ID”、“Azure Active Directory 模块”Windows PowerShell

    2. 按命令的显示顺序键入以下命令,并在每个命令后按 Enter:

      $cred = get-credential
      

      注意

      出现提示时,输入 Microsoft 365 管理员凭据。

      Connect-MSOLService –credential $cred
      

      注意

      自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模块已弃用。 若要了解详细信息,请阅读 弃用更新。 在此日期之后,对这些模块的支持仅限于 Microsoft Graph PowerShell SDK 和安全修补程序的迁移帮助。 弃用的模块将继续运行到 2025 年 3 月 30 日。

      建议迁移到 Microsoft Graph PowerShell,以便与以前为 Azure AD) Microsoft Entra ID (交互。 有关常见的迁移问题,请参阅 迁移常见问题解答注意: MSOnline 1.0.x 版可能会在 2024 年 6 月 30 日之后遇到中断。

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

  3. 检查 Microsoft 365 中是否存在重复的 userPrincipalName 属性。

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

    $userUPN = "<search UPN>"
    

    注意

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

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

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

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

    $UserCredential = Get-Credential
    Connect-ExchangeOnline -Credential $UserCredential
    
  5. 对于在步骤 1f 中记录的每个代理地址条目,按命令的显示顺序键入以下命令,并在每个命令后按 Enter:

    $proxyAddress = "<search proxyAddress>"
    

    注意

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

    Get-EXOMailbox | Where {[string] $str = ($_.EmailAddresses); $str.tolower().Contains($proxyAddress.tolower()) -eq $true} | foreach {get-MsolUser -ObjectID $_.ExternalDirectoryObjectId | Where {($_.LastDirSyncTime -eq $null)}}
    

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

确定有冲突或无效的属性值后,请按照以下 Microsoft 知识库文章中的步骤解决问题:

2643629 使用 Azure Active Directory 同步工具时,一个或多个对象不会同步

更多信息

本文中的Windows PowerShell命令需要用于Windows PowerShell的 Azure Active Directory 模块。 有关用于Windows PowerShell的 Azure Active Directory 模块的详细信息,请转到以下 Microsoft 网站:

Microsoft Entra Cmdlet

仍然需要帮助? 请转到 Microsoft 社区