使用 Microsoft Entra Connect Sync 排查密码哈希同步

本主题提供解决密码哈希同步问题的步骤。 如果密码未按预期同步,则它可以用于一部分用户或所有用户。

对于 1.1.614.0 版或更高版本的 Microsoft Entra Connect 部署,使用向导中的故障排除任务来排除密码哈希同步问题:

对于版本 1.1.524.0 或更高版本的部署,可以使用诊断命令来排查密码哈希同步问题。

对于较早版本的 Microsoft Entra Connect 部署:

未同步任何密码:使用故障排除任务进行故障排除

可以使用此故障排除任务查明未同步任何密码的原因。

注意

此故障排除任务仅可用于 Microsoft Entra Connect 1.1.614.0 版或更高版本。

运行故障排除任务

排查未同步任何密码的问题:

  1. 使用以管理员身份运行选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。

  2. 运行 Set-ExecutionPolicy RemoteSignedSet-ExecutionPolicy Unrestricted

  3. 启动 Microsoft Entra Connect 向导。

  4. 导航到 其他任务 页面,选择 故障排除,然后选择 下一步

  5. 在“故障排除”页上,选择 启动 以在 PowerShell 中启动故障排除菜单。

  6. 在主菜单中,选择排查密码哈希同步问题

  7. 在子菜单中,选择密码哈希同步根本不工作

了解故障排除任务的结果

此故障排除任务执行以下检查:

  • 验证是否为 Microsoft Entra 租户启用了密码哈希同步功能。

  • 验证 Microsoft Entra Connect 服务器是否不在暂存模式下。

  • 对于每个现有本地 Active Directory 连接器(对应于现有 Active Directory 林):

    • 验证是否启用了密码哈希同步功能。

    • 在应用程序事件日志中寻找密码哈希同步心跳事件。

    • 对于本地 Active Directory 连接器下的每个 Active Directory 域:

      • 验证是否可从 Microsoft Entra Connect 服务器访问该域。

      • 验证本地 Active Directory 连接器所用的 Active Directory 域服务 (AD DS) 帐户是否具有正确的用户名、密码和密码哈希同步所需的权限。

下图演示了对单个域的本地 Active Directory 拓扑运行 cmdlet 的结果:

密码哈希同步的诊断输出

本部分的其余部分介绍任务返回的特定结果和相应的问题。

未启用密码哈希同步功能

如果未使用 Microsoft Entra Connect 向导启用密码哈希同步,则返回以下错误:

未启用密码哈希同步

Microsoft Entra Connect 服务器处于暂存模式

如果 Microsoft Entra Connect 服务器处于暂存模式,则暂时禁用密码哈希同步,并返回以下错误:

Microsoft Entra Connect 服务器处于暂存模式

没有密码哈希同步检测信号事件

每个本地 Active Directory 连接器都维护自己的密码哈希同步通道。 当通道处于活动状态但没有密码更改待处理时,Windows 应用程序事件日志中每 30 分钟记录一次心跳事件(事件 ID 654)。

要验证通道运行状况,该 cmdlet 会检查过去三小时内来自每个连接器的检测信号事件。 如果未找到,则返回以下错误:

没有密码哈希同步检测信号事件

AD DS 帐户没有正确的权限

如果本地 Active Directory 连接器用于同步密码哈希的 AD DS 帐户没有相应的权限,则返回以下错误:

显示 AD DS 帐户用户名或密码不正确时返回的错误的屏幕截图。

错误的 AD DS 帐户用户名或密码

如果本地 Active Directory 连接器用于同步密码哈希的 AD DS 帐户的用户名或密码不正确,则返回以下错误:

错误的凭据

一个对象未同步密码:使用故障排除任务进行故障排除

可以使用故障排除任务来确定为什么一个对象未同步密码。

注意

此故障排除任务仅可用于 Microsoft Entra Connect 1.1.614.0 版或更高版本。

运行诊断 cmdlet

排查特定用户对象的问题:

  1. 使用以管理员身份运行选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。

  2. 运行 Set-ExecutionPolicy RemoteSignedSet-ExecutionPolicy Unrestricted

  3. 启动 Microsoft Entra Connect 向导。

  4. 导航到 其他任务 页面,选择 故障排除,然后选择 下一步

  5. 在“故障排除”页上,选择 启动 以在 PowerShell 中启动故障排除菜单。

  6. 在主菜单中,选择排查密码哈希同步问题

  7. 在子菜单中,选择特定用户帐户的密码未同步

了解故障排除任务的结果

此故障排除任务执行以下检查:

  • 检查 Active Directory 连接器空间中的 Active Directory 对象、Metaverse 和 Microsoft Entra 连接器空间的状态。

  • 验证是否为密码哈希同步启用了同步规则,并将该规则应用于 Active Directory 对象。

  • 尝试检索和显示上次尝试同步对象密码的结果。

下图演示了使用 cmdlet 排查单个对象的密码哈希同步问题的结果:

密码哈希同步的诊断输出 - 单个对象

本部分的剩余内容说明了 cmdlet 返回的特定结果以及相应问题。

Active Directory 对象未导出到 Microsoft Entra ID

此本地 Active Directory 帐户的密码哈希同步失败,因为Microsoft Entra 租户中没有相应的对象。 返回以下错误:

Microsoft Entra 对象缺失

用户的密码为临时密码

旧版 Microsoft Entra Connect 不支持将临时密码与 Microsoft Entra ID 同步。 如果在本地 Active Directory 用户中设置了下次登录时更改密码选项,则会将密码视为临时密码。 如果使用这些较旧版本,将返回以下错误:

临时密码未导出

若要启用临时密码同步,必须已安装 Microsoft Entra Connect 版本 2.0.3.0 或更高版本,并且必须启用 ForcePasswordChangeOnLogon 功能。

上次尝试同步密码的结果不可用

默认情况下,Microsoft Entra Connect 会将密码哈希同步尝试的结果存储七天。 如果所选 Active Directory 对象没有可用结果,则返回以下警告:

单个对象的诊断输出 - 没有密码同步历史记录

未同步任何密码:使用诊断 cmdlet 排查问题

可以使用 Invoke-ADSyncDiagnostics cmdlet 找出未同步任何密码的原因。

注意

Invoke-ADSyncDiagnostics cmdlet 仅可用于 Microsoft Entra Connect 1.1.524.0 版或更高版本。

运行诊断 cmdlet

排查未同步任何密码的问题:

  1. 使用以管理员身份运行选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。

  2. 运行 Set-ExecutionPolicy RemoteSignedSet-ExecutionPolicy Unrestricted

  3. 运行 Import-Module ADSyncDiagnostics

  4. 运行 Invoke-ADSyncDiagnostics -PasswordSync

一个对象未同步密码:使用“诊断 cmdlet”进行故障排除。

可以使用 Invoke-ADSyncDiagnostics cmdlet 来确定为什么一个对象未同步密码。

注意

Invoke-ADSyncDiagnostics cmdlet 仅可用于 Microsoft Entra Connect 1.1.524.0 版或更高版本。

运行诊断 cmdlet

排查没有为用户同步任何密码的问题:

  1. 使用以管理员身份运行选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。

  2. 运行 Set-ExecutionPolicy RemoteSignedSet-ExecutionPolicy Unrestricted

  3. 运行 Import-Module ADSyncDiagnostics

  4. 获取用户的 DistinguishedName (DN) 并运行以下 cmdlet:

    Invoke-ADSyncDiagnostics -PasswordSync -ADConnectorName <Name-of-AD-Connector> -DistinguishedName <DistinguishedName-of-AD-object>
    

    例如:

    Invoke-ADSyncDiagnostics -PasswordSync -ADConnectorName "contoso.com" -DistinguishedName "CN=TestUserCN=Users,DC=contoso,DC=com"
    

未同步任何密码:手动排查问题的步骤

按照下列步骤确定未同步任何密码的原因:

  1. 连接服务器是否处于暂存模式? 处于暂存模式的服务器不同步任何密码。

  2. 运行获取密码同步设置的状态部分中的脚本。 这样可以大致了解密码同步配置。

    PowerShell 脚本从密码同步设置中返回的输出

  3. 如果未在 Microsoft Entra ID中启用该功能,或者未启用同步通道状态,请运行 Connect 安装向导。 选择自定义同步选项并取消选择密码同步。此项更改会暂时禁用该功能。 然后再次运行向导并重新启用密码同步。再次运行脚本,验证配置是否正确。

  4. 查看事件日志,查找错误。 查找下述事件,这些事件指示存在问题:

    源:使用目录同步
    ID:0、611、652、655

    如果看到这些事件,则表示有连接问题。 事件日志消息包含有问题的林信息。

  5. 如果没有看到检测信号,或者其他方面均为异常,则运行触发所有密码的完全同步。 仅运行该脚本一次。

  6. 请参阅“解决某个对象密码未同步的问题”部分。

连接问题和 AD DS 权限

检查 Microsoft Entra Connect 是否可以连接到 Microsoft Entra ID。

AD DS 连接器帐户必须具有读取所有域中密码哈希的必要权限。

如果使用 Express 设置安装Microsoft Entra Connect,则会自动配置所需的权限。

如果使用自定义安装,请执行以下步骤手动分配权限:

  1. 若要查找 Active Directory 连接器使用的帐户,请启动 Synchronization Service Manager

  2. 转到“连接器”,并搜索正在排查的本地 Active Directory 林

  3. 选择连接器,然后选择属性

  4. 转到“连接到 Active Directory 林”。

    Active Directory 连接器使用的帐户
    记下用户名和帐户所处的域。

  5. 打开 Active Directory 用户和计算机,然后验证之前找到的帐户是否在林中所有域的根目录中设置了以下权限:

    • 复制目录更改
    • 复制所有目录更改
  6. Microsoft Entra Connect 是否可以访问域控制器? 如果连接服务器无法连接到所有域控制器,请 配置仅使用首选域控制器

    Active Directory 连接器使用的域控制器

  7. 返回到Synchronization Service Manager配置目录分区

  8. 选择目录分区中选择域,选中仅使用首选的域控制器复选框,然后选择配置

  9. 在列表中,输入应由 Connect 用于密码同步的域控制器。同一列表也用于导入和导出。 对所有域执行这些步骤。

注意

若要应用这些更改,请重启 Microsoft Entra ID Sync (ADSync) 服务。

  1. 如果脚本显示没有检测信号,请运行触发所有密码的完全同步中的脚本。

一个对象未同步密码:手动故障排除步骤

可以通过检查对象的状态,轻松排查密码哈希同步问题。

  1. Active Directory 用户和计算机中搜索用户,然后验证是否清除了用户必须在下次登录时更改密码复选框。

    Active Directory 效率密码

如果选中该复选框,则要求用户登录并更改密码。 临时密码不会与 Microsoft Entra ID 同步。

  1. 如果 Active Directory 中的密码正确,请在同步引擎中跟踪该用户。 通过从本地 Active Directory 跟踪用户到 Microsoft Entra ID,您可以查看对象上是否存在描述性错误。

    a。 启动 Synchronization Service Manager

    b. 选择连接器

    c. 选择用户所在的 Active Directory 连接器

    d. 选择“搜索连接器空间”。

    e. 在“作用域”框中,选择“DN 或定位点”,然后输入要排查的用户的完整 DN

    在连接器空间中使用 DN 搜索用户

    f。 找到要查找的用户,然后选择 属性 以查看所有属性。 如果用户不在搜索结果中,请验证 筛选规则,并确保执行“应用并验证更改”,以便用户出现在 Connect 中。

    g. 若要查看过去一周对象的密码同步详细信息,请选择 日志

    对象日志详细信息

    如果对象日志为空,Microsoft Entra Connect 无法从 Active Directory 读取密码哈希。 继续进行针对连接错误的故障排除。 如果看到除成功外的任何其他值,请参阅密码同步日志中的表。

    h. 选择“沿袭”选项卡,确保至少有一个同步规则的“密码同步”列设置为“True”。 在默认配置中,同步规则的名称为“In from AD - User AccountEnabled”。

    有关用户的沿袭信息

    一. 选择 Metaverse 对象属性 以显示用户属性的列表。

    显示 Metaverse 对象属性的用户属性列表的屏幕截图。

    验证是否不存在 cloudFiltered 属性。 确保域属性(domainFQDN 和 domainNetBios)具有所需值。

    j. 选择 连接器 选项卡。请确保能够看到连接到本地 Active Directory 和 Microsoft Entra ID 的连接器。

    Metaverse 信息

    k. 选择表示 Microsoft Entra ID 的行,选择“属性”,然后选择“世系”选项卡。连接器空间对象应存在一个“密码同步”列设置为“True”的出站规则。 在默认配置中,同步规则的名称为“Out to Microsoft Entra ID - User Join”

    连接器空间对象属性对话框

密码哈希同步日志

状态列可能包含以下值:

状态 说明
成功 已成功同步密码。
按目标过滤 密码设置为用户在下次登录时必须更改密码。 密码尚未同步。
NoTargetConnection Metaverse 或 Microsoft Entra 连接器空间中没有任何对象。
源连接器不存在 在本地 Active Directory 连接器空间中找不到任何对象。
TargetNotExportedToDirectory 尚未导出Microsoft Entra 连接器空间中的对象。
MigratedCheckDetailsForMoreInfo 日志条目创建于版本 1.0.9125.0 之前,并且以其旧状态显示。
错误 服务返回未知错误。
未知 尝试处理一批密码哈希时出错。
MissingAttribute Microsoft Entra 域服务所需的特定属性(例如 Kerberos 哈希)当前不可用。
RetryRequestedByTarget Microsoft Entra 域服务所需的特定属性(例如 Kerberos 哈希)在过去是不存在的。 尝试重新同步用户的密码哈希。

Windows 事件查看器中与密码哈希同步相关的日志

密码哈希同步功能在 Windows 事件查看器中生成一组全面的应用程序事件,捕获其大部分操作活动。

若要进行有效的故障排除,请考虑增加应用程序日志的大小。 如果不进行此调整,可能会覆盖密码哈希同步事件,从而难以跟踪同步状态和诊断问题。

事件编号 说明
601 密码哈希同步管理器正在启动。
602 密码哈希同步正在停止。
603 发生密码哈希同步意外错误。
604 发生密码哈希同步任务错误。
605 密码哈希同步项将添加到重试队列。
606 密码哈希同步项将从重试队列中删除。
607 密码哈希同步无法启动。
609 密码哈希同步已停止。
610 密码哈希同步无法停止。
611 域密码哈希同步期间出错。
612 初始化密码哈希同步上下文时出错。
613 密码哈希同步代理已暂停,因为目录完全同步尚未完成。
614 密码哈希同步启动是在系统未关闭时调用的。
615 发生密码哈希同步工作线程异常。
616 与首选 DC 的密码哈希同步连接失败。
617 林的完整密码哈希同步已启动。
618 域中的完整密码哈希同步已启动。
619 显示域的密码哈希同步的进度。
620 报告无重试密码哈希同步对象。
621 完全密码哈希同步尝试失败。
622 为域成功完成完整密码哈希同步。
623 林的完整密码哈希同步已完成。
650 密码哈希同步批处理的启动。
651 密码哈希同步批处理的结束。
652 密码哈希同步作期间出错。
653 密码哈希同步 ping 开始。
654 密码哈希同步 ping 结束。
655 密码哈希同步 ping 期间出错。
656 密码哈希同步请求消息。
657 密码哈希同步响应消息。
658 DCaaS 同步事件日志消息。
659 密码策略同步事件日志消息。
660 密码哈希同步公司功能自我修复开始。
661 密码哈希同步公司功能自我修复结束。
662 在 ping操作期间,密码哈希同步运行状况任务失败。
663 密码哈希同步管理器处于活动状态且正在运行。
664 单个对象同步任务失败。
665 存储域的密码哈希同步循环状态失败。
666 由于 sql 死锁,域的密码哈希同步失败。
667 生成 MD5 解密密钥失败。
668 密码哈希同步批处理中仅 PwdLastSet 已更改的对象数量。

用于故障排除的脚本

获取密码同步设置的状态

Import-Module ADSync
$connectors = Get-ADSyncConnector
$aadConnectors = $connectors | Where-Object {$_.SubType -eq "Windows Azure Active Directory (Microsoft)"}
$adConnectors = $connectors | Where-Object {$_.ConnectorTypeName -eq "AD"}
if ($aadConnectors -ne $null -and $adConnectors -ne $null)
{
    if ($aadConnectors.Count -eq 1)
    {
        $features = Get-ADSyncAADCompanyFeature
        Write-Host
        Write-Host "Password sync feature enabled in your Azure AD directory: "  $features.PasswordHashSync
        foreach ($adConnector in $adConnectors)
        {
            Write-Host
            Write-Host "Password sync channel status BEGIN ------------------------------------------------------- "
            Write-Host
            Get-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector.Name
            Write-Host
            $pingEvents =
                Get-EventLog -LogName "Application" -Source "Directory Synchronization" -InstanceId 654  -After (Get-Date).AddHours(-3) |
                    Where-Object { $_.Message.ToUpperInvariant().Contains($adConnector.Identifier.ToString("D").ToUpperInvariant()) } |
                    Sort-Object { $_.Time } -Descending
            if ($pingEvents -ne $null)
            {
                Write-Host "Latest heart beat event (within last 3 hours). Time " $pingEvents[0].TimeWritten
            }
            else
            {
                Write-Warning "No ping event found within last 3 hours."
            }
            Write-Host
            Write-Host "Password sync channel status END ------------------------------------------------------- "
            Write-Host
        }
    }
    else
    {
        Write-Warning "More than one Azure AD Connectors found. Please update the script to use the appropriate Connector."
    }
}
Write-Host
if ($aadConnectors -eq $null)
{
    Write-Warning "No Azure AD Connector was found."
}
if ($adConnectors -eq $null)
{
    Write-Warning "No AD DS Connector was found."
}
Write-Host

触发所有密码的完全同步

注意

仅运行此脚本一次。 如果需要多次运行该脚本,会出现其他问题。 若要排查问题,请联系 Microsoft 支持部门。

可以使用以下脚本触发所有密码的完全同步:

  1. 分配本地 Active Directory $adConnector 值

    $adConnector = "<CASE SENSITIVE AD CONNECTOR NAME>"

  2. 分配 AzureAD $aadConnector

    $aadConnector = "<CASE SENSITIVE AAD CONNECTOR NAME>"

  3. 安装 AzureAD 同步模块

    Import-Module adsync

  4. 创建新的强制完全密码同步配置参数对象

    $c = Get-ADSyncConnector -Name $adConnector

  5. 使用以下新配置更新现有连接器。 单独运行每行

    a。 $p = New-Object Microsoft.IdentityManagement.PowerShell.ObjectModel.ConfigurationParameter "Microsoft.Synchronize.ForceFullPasswordSync", String, ConnectorGlobal, $null, $null, $null

    b. $p.Value = 1

    c. $c.GlobalParameters.Remove($p.Name)

    d. $c.GlobalParameters.Add($p)

    e. $c = Add-ADSyncConnector -Connector $c

  6. 禁用 Entra ID Connect

    Set-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector -TargetConnector $aadConnector -Enable $false

  7. 启用 Entra ID Connect 以强制完全密码同步

    Set-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector -TargetConnector $aadConnector -Enable $true

后续步骤