重复或无效的属性可防止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) 地址中具有多个唯一后缀(@),所有别名值也必须是唯一的。

在本地环境中,您可以使用相同的别名值,只要它们在 SMTP 地址中 @ 符号后的后缀部分是唯一的即可。

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

解决方案

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

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

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

运行 IdFix 工具后,2857385 在 ERROR 列中显示“重复”提示于两个或多个对象。

方法 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 (3): x500:/o=Exchange/ou=Exchange 管理组/群名/cn=Recipients/cn=GUID;smtp:7628376@service.contoso.com;SMTP:7628376@contoso.com; 属性标签旁的括号中显示的数字指示多值属性中的代理地址值数。 每个不同的代理地址值由分号 (;)) 指示。 主 SMTP 代理地址值由大写“SMTP:”指示
      用户主体名称 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”,然后单击 Windows PowerShell 的 Azure Active Directory 模块

    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,以便与 Microsoft Entra ID(以前称为 Azure AD)进行交互。 有关常见迁移问题,请参阅迁移常见问题解答注意:2024 年 6 月 30 日之后,MSOnline 版本 1.0.x 可能会遇到中断。

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

  3. 检查 Microsoft 365 中的重复 userPrincipalName 属性。

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

    $userUPN = "<search UPN>"
    

    注释

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

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

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

  4. 检查是否存在重复的代理地址属性。 在步骤 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 社区