本主题提供解决密码哈希同步问题的步骤。 如果密码未按预期同步,请区分该密码是一部分用户的密码还是所有用户的密码。
对于 1.1.614.0 版或更高版本的 Microsoft Entra Connect 部署,使用向导中的故障排除任务来排除密码哈希同步问题:
如果遇到未同步任何密码的问题,请参阅未同步任何密码:使用故障排除任务进行故障排除部分。
如果个别对象出现问题,请参阅一个对象未同步密码:使用故障排除任务进行故障排除部分。
对于 1.1.524.0 版或更高版本的部署,可以使用一个诊断 cmdlet 排查密码哈希同步问题:
如果遇到未同步任何密码的问题,请参阅未同步任何密码:使用诊断 cmdlet 排查问题部分。
如果单个对象出现问题,请参阅一个对象未同步密码:使用诊断 cmdlet 排查问题部分。
对于较早版本的 Microsoft Entra Connect 部署:
如果遇到未同步任何密码的问题,请参阅未同步任何密码:手动排查问题的步骤部分。
如果单个对象出现问题,请参阅一个对象未同步密码:手动排查问题的步骤部分。
未同步任何密码:使用故障排除任务进行故障排除
可以使用此故障排除任务查明未同步任何密码的原因。
注意
此故障排除任务仅可用于 Microsoft Entra Connect 1.1.614.0 版或更高版本。
运行故障排除任务
排查未同步任何密码的问题:
使用“以管理员身份运行”选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。
运行
Set-ExecutionPolicy RemoteSigned
或Set-ExecutionPolicy Unrestricted
。启动 Microsoft Entra Connect 向导。
导航到“其他任务”页面,选择“故障排除”,然后选择“下一步”。
在“故障排除”页上,选择“启动”以在 PowerShell 中启动故障排除菜单。
在主菜单中,选择“排查密码哈希同步问题”。
在子菜单中,选择“密码哈希同步根本不工作”。
了解故障排除任务的结果
此故障排除任务执行以下检查:
验证是否为 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 服务器处于暂存模式,则暂时禁用密码哈希同步,并返回以下错误:
没有密码哈希同步检测信号事件
每个本地 Active Directory 连接器都维护自己的密码哈希同步通道。 当通道处于活动状态但没有密码更改待处理时,Windows 应用程序事件日志中每 30 分钟记录一次心跳事件(事件 ID 654)。
要验证通道运行状况,该 cmdlet 会检查过去三小时内来自每个连接器的检测信号事件。 如果未找到,则返回以下错误:
AD DS 帐户没有正确的权限
如果本地 Active Directory 连接器用于同步密码哈希的 AD DS 帐户没有相应的权限,则返回以下错误:
错误的 AD DS 帐户用户名或密码
如果本地 Active Directory 连接器用于同步密码哈希的 AD DS 帐户的用户名或密码不正确,则返回以下错误:
一个对象未同步密码:使用故障排除任务进行故障排除
可以使用此故障排除任务来确定某个对象未同步密码的原因。
注意
此故障排除任务仅可用于 Microsoft Entra Connect 1.1.614.0 版或更高版本。
运行诊断 cmdlet
排查特定用户对象的问题:
使用“以管理员身份运行”选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。
运行
Set-ExecutionPolicy RemoteSigned
或Set-ExecutionPolicy Unrestricted
。启动 Microsoft Entra Connect 向导。
导航到“其他任务”页面,选择“故障排除”,然后选择“下一步”。
在“故障排除”页上,选择“启动”以在 PowerShell 中启动故障排除菜单。
在主菜单中,选择“排查密码哈希同步问题”。
在子菜单中,选择“特定用户帐户的密码未同步”。
了解故障排除任务的结果
此故障排除任务执行以下检查:
检查 Active Directory 连接器空间中的 Active Directory 对象、Metaverse 和 Microsoft Entra 连接器空间的状态。
验证是否为密码哈希同步启用了同步规则,并将该规则应用于 Active Directory 对象。
尝试检索和显示上次尝试同步对象密码的结果。
下图演示了使用 cmdlet 排查单个对象的密码哈希同步问题的结果:
本部分的剩余内容说明了 cmdlet 返回的特定结果以及相应问题。
Active Directory 对象未导出到 Microsoft Entra ID
此本地 Active Directory 帐户的密码哈希同步失败。因为 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
排查未同步任何密码的问题:
使用“以管理员身份运行”选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。
运行
Set-ExecutionPolicy RemoteSigned
或Set-ExecutionPolicy Unrestricted
。运行
Import-Module ADSyncDiagnostics
。运行
Invoke-ADSyncDiagnostics -PasswordSync
。
一个对象未同步密码:使用诊断 cmdlet 排查问题
可使用 Invoke-ADSyncDiagnostics
cmdlet 来确定某个对象未同步密码的原因。
注意
Invoke-ADSyncDiagnostics
cmdlet 仅可用于 Microsoft Entra Connect 1.1.524.0 版或更高版本。
运行诊断 cmdlet
排查没有为用户同步任何密码的问题:
使用“以管理员身份运行”选项,在 Microsoft Entra Connect 服务器上打开一个新的 Windows PowerShell 会话。
运行
Set-ExecutionPolicy RemoteSigned
或Set-ExecutionPolicy Unrestricted
。运行
Import-Module ADSyncDiagnostics
。获取用户的
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"
未同步任何密码:手动排查问题的步骤
按照下列步骤确定未同步任何密码的原因:
连接服务器是否处于暂存模式? 处于暂存模式的服务器不同步任何密码。
运行获取密码同步设置的状态部分中的脚本。 这样可以大致了解密码同步配置。
如果未在 Microsoft Entra ID 中启用该功能,或者未启用同步通道状态,请运行 Connect 安装向导。 选择“自定义同步选项”并取消选择密码同步。此项更改会暂时禁用该功能。 然后再次运行向导并重新启用密码同步。再次运行脚本,验证配置是否正确。
查看事件日志,查找错误。 查找下述事件,这些事件指示存在问题:
源:“目录同步”
ID:0、611、652、655如果看到这些事件,则表示有连接问题。 事件日志消息包含有问题的林信息。
如果没有看到检测信号,或者其他方面均为异常,则运行触发所有密码的完全同步。 仅运行该脚本一次。
请参阅“排查一个对象未同步密码的问题”部分。
连接问题和 AD DS 权限
检查 Microsoft Entra Connect 是否可以连接到 Microsoft Entra ID。
AD DS 连接器帐户必须具有读取所有域中密码哈希的必要权限。
如果使用 Express 设置安装Microsoft Entra Connect,则会自动配置所需的权限。
如果使用自定义安装,请执行以下步骤手动分配权限:
若要查找 Active Directory 连接器使用的帐户,请启动 Synchronization Service Manager。
转到“连接器”,并搜索正在排查的本地 Active Directory 林。
选择连接器,然后选择“属性”。
转到“连接到 Active Directory 林”。
记下用户名和帐户所处的域。打开“Active Directory 用户和计算机”,然后验证之前找到的帐户是否在林中所有域的根目录中设置了以下权限:
- 复制目录更改
- 复制所有目录更改
Microsoft Entra Connect 是否可以访问域控制器? 如果连接服务器无法连接到所有域控制器,请 配置仅使用首选域控制器。
返回到“Synchronization Service Manager”和“配置目录分区”。
在“选择目录分区”中选择域,选中“仅使用首选的域控制器”复选框,然后选择“配置”。
在列表中,输入应由 Connect 用于密码同步的域控制器。同一列表也用于导入和导出。 对所有域执行这些步骤。
注意
若要应用这些更改,请重启 Microsoft Entra ID Sync (ADSync) 服务。
- 如果脚本显示没有检测信号,请运行触发所有密码的完全同步中的脚本。
一个对象未同步密码:手动排查问题的步骤
可以通过检查对象的状态,轻松排查密码哈希同步问题。
在“Active Directory 用户和计算机”中搜索用户,然后验证是否清除了“用户必须在下次登录时更改密码”复选框 。
如果选中该复选框,则要求用户登录并更改密码。 临时密码不会与 Microsoft Entra ID 同步。
如果 Active Directory 中的密码正确,请在同步引擎中跟踪该用户。 在从本地 Active Directory 到 Microsoft Entra ID 的路径中跟踪该用户,可以查看该对象是否出现描述性错误。
a. 启动 Synchronization Service Manager。
b. 选择连接器。
c. 选择用户所在的 Active Directory 连接器。
d. 选择“搜索连接器空间”。
e. 在“作用域”框中,选择“DN 或定位点”,然后输入要排查的用户的完整 DN 。
f. 找到正在查找的用户,然后选择“属性”查看所有特性。 如果用户不在搜索结果中,请验证筛选规则,并确保运行应用并验证更改以在 Connect 中显示用户。
g. 若要查看对象在过去一周的密码同步详细信息,请选择“日志”。
如果对象日志为空,Microsoft Entra Connect 无法从 Active Directory 读取密码哈希。 继续进行针对连接错误的故障排除。 如果看到除“成功”外的任何其他值,请参阅密码同步日志中的表。
h.如果该值不存在,请单击“添加行”。 选择“沿袭”选项卡,确保至少有一个同步规则的“密码同步”列设置为“True” 。 在默认配置中,同步规则的名称为“In from AD - User AccountEnabled”。
i. 选择“Metaverse 对象属性”,显示用户特性列表。
验证 cloudFiltered 属性不存在。 确保域属性(domainFQDN 和 domainNetBios)具有所需值。
j. 选择“连接器”选项卡。请确保同时看到本地 Active Directory 和 Microsoft Entra ID 的连接器。
k. 选择表示 Microsoft Entra ID 的行,选择“属性”,然后选择“沿袭”选项卡。连接器空间对象应存在一个“密码同步”列设置为“True”的出站规则。 在默认配置中,同步规则的名称为 Microsoft Entra ID - User Join。
密码哈希同步日志
状态列可能包含以下值:
状态 | 说明 |
---|---|
Success | 已成功同步密码。 |
FilteredByTarget | 密码设置为“用户在下次登录时必须更改密码”。 未同步密码。 |
NoTargetConnection | Metaverse 或 Microsoft Entra 连接器空间中没有任何对象。 |
SourceConnectorNotPresent | 在本地 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 "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 支持部门。
可以使用以下脚本触发所有密码的完全同步:
分配本地 Active Directory $adConnector 值
$adConnector = "<CASE SENSITIVE AD CONNECTOR NAME>"
分配 AzureAD $aadConnector 值
$aadConnector = "<CASE SENSITIVE AAD CONNECTOR NAME>"
安装 AzureAD 同步模块
Import-Module adsync
创建新的强制完全密码同步配置参数对象
$c = Get-ADSyncConnector -Name $adConnector
使用以下新配置更新现有连接器。 单独运行每行
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
禁用 Entra ID Connect
Set-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector -TargetConnector $aadConnector -Enable $false
启用 Entra ID Connect 以强制完全密码同步
Set-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector -TargetConnector $aadConnector -Enable $true