使用PowerShell跨域获取Active Directory用户属性问题求助
问题解决思路与方案
问题根源
跨域场景下,直接使用[ADSI] "LDAP://$UserDN"不会复用Get-ADUser时传入的凭据,而是默认使用本地进程的身份访问目标域,因权限不足导致返回空属性。
方案1:直接通过Get-ADUser获取属性(推荐)
无需额外调用ADSI,Get-ADUser本身就能直接返回所需属性,只需明确指定要获取的字段:
$Credential = Get-StoredCredential -Target targetdomaincredential $userId = 'UserID' # 用-Properties指定需要的属性,默认仅返回有限字段 Get-ADUser -Server ADDCX -Credential $Credential -Filter {SamAccountName -eq $userId} ` -Properties givenName, sn, distinguishedName, path | Format-List
方案2:使用DirectoryEntry显式传入凭据(如需保留ADSI逻辑)
[ADSI]是DirectoryEntry的快捷方式,但不支持传入跨域凭据,需显式创建DirectoryEntry对象并指定授权信息:
$Credential = Get-StoredCredential -Target targetdomaincredential $userId = 'UserID' $UserDN = (Get-ADUser -Server ADDCX -Credential $Credential -Filter {SamAccountName -eq $userId}).DistinguishedName # 显式创建DirectoryEntry并传入凭据 $adEntry = New-Object System.DirectoryServices.DirectoryEntry( "LDAP://$UserDN", $Credential.UserName, $Credential.GetNetworkCredential().Password ) # 强制加载属性缓存 $adEntry.RefreshCache() $adEntry | Select-Object * | Format-List
额外排查点
- 确认存储的凭据账号在目标域拥有读取用户属性的权限(默认域用户通常具备此权限,特殊ACL配置需单独验证)
- 若LDAP路径解析异常,可指定域控制器地址:
"LDAP://ADDCX/$UserDN"
内容的提问来源于stack exchange,提问作者user3596261
相关产品推荐
相关产品推荐

