You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Microsoft Entra Connect Sync环境中用户SID一致性及代码有效性的问询

Azure混合环境中Entra ID与本地AD用户SID一致性及PowerShell代码问题解析

核心问题解答:SID是否一致?

不一致。本地Active Directory的用户SID是域内唯一的安全标识符,由本地域控制器生成。通过Microsoft Entra Connect Sync同步到Azure Entra ID的用户,会生成一个独立的Azure AD专属SID(可通过Convert-AzureAdObjectIdToSid转换得到),这个SID和本地AD的用户SID完全不相同。这是导致你提供的四段PowerShell代码执行失败的根本原因。

各段PowerShell代码失败原因分析

代码1:SecurityIdentifier转换失败

$objSID = New-Object System.Security.Principal.SecurityIdentifier($SID);
$objUser = $objSID.Translate([System.Security.Principal.NTAccount]);

Windows的SecurityIdentifier类仅能识别本地AD域账户、本地机器账户的SID,无法识别Azure AD专属SID。调用Translate方法时,系统找不到对应的NT账户,会抛出“无法将安全标识符转换为账户名”类的错误。

代码2:LDAP查询无结果

$LDAPQuery = "LDAP://<SID=$SID>";
$AdRecord = [adsi]$LDAPQuery;

LDAP查询指向的是本地Active Directory的数据库,Azure AD的SID不存在于本地AD的对象集合中,因此查询会返回空对象或直接报错“找不到对象”。

代码3:注册表路径不存在

$RegistryDrive = New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS;
$RegistryFolder = "{0}:\{1}\Volatile Environment" -f $RegistryDrive.Name, $SID;
$UserDomain = (Get-ItemProperty -Path $RegistryFolder).USERDOMAIN;
$UserName = (Get-ItemProperty -Path $RegistryFolder).USERNAME;
$objUser = ("{0}\{1}" -f $UserDomain, $UserName);

HKEY_USERS注册表分支下仅存储本地系统中登录过的用户(本地账户或域账户)的SID对应的配置项,Azure AD的SID不会出现在这里,执行时会报错“指定的路径不存在”。

代码4:WMI查询无匹配对象

$WmiQuery = "root\cimv2:win32_sid.sid='{0}'" -f $SID;
$WmiObject = [WMI]$WmiQuery;
$objUser = ("{0}\{1}" -f $WmiObject.AccountName, $WmiObject.ReferencedDomainName);

Win32_SID WMI类仅维护本地系统可识别的SID列表(本地/域账户),Azure AD的SID不在该列表中,查询会返回空对象,后续调用AccountName和ReferencedDomainName属性时会抛出“未将对象引用设置到对象的实例”错误。


内容的提问来源于stack exchange,提问作者A LaMark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:33:15