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

跨信任域查询用户AD组成员身份的PowerShell方案咨询

跨信任域查询用户全部组成员身份的最佳方案

嘿,作为AD脚本新手碰到这种跨域组查询的问题确实很正常——毕竟Get-ADPrincipalGroupMembership默认只能覆盖当前域,跨域的Foreign Security Principal(FSP)确实是个容易卡壳的点。下面我给你一套清晰的分步方案,代码都是新手友好的,每一步都有解释:

核心原理梳理

首先得明确两个关键点:

  • 用户在本域的组成员身份:直接用AD cmdlet就能查到,没啥问题。
  • 用户在信任域的组成员身份:因为信任域不会创建用户对象,只会生成和用户SID完全一致的FSP对象。所以我们可以通过用户的SID去信任域里定位对应的FSP,再反向查询这个FSP所属的所有组。

完整PowerShell脚本实现

下面是可以直接复用的脚本,我加了详细注释,你只需要替换开头的变量值就行:

# 1. 定义基础变量(替换成你的实际信息)
$userName = "User1"
$userDomain = "Domain1"
$trustedDomain = "Domain2"

# 2. 获取本域用户对象,提取关键属性(尤其是SID)
$user = Get-ADUser -Identity $userName -Server $userDomain -Properties SID, MemberOf

# 3. 查询用户在本域的所有组(自动处理嵌套组)
$domain1Groups = Get-ADPrincipalGroupMembership -Identity $user -Server $userDomain | Select-Object Name, DistinguishedName, GroupCategory

# 4. 定位信任域中对应用户的Foreign Security Principal对象
$fsp = Get-ADObject -Server $trustedDomain -Filter {ObjectClass -eq 'foreignSecurityPrincipal' -and ObjectSID -eq $user.SID}

# 5. 查询该FSP在信任域中的所有组成员身份
$domain2Groups = @()
if ($fsp) {
    $domain2Groups = Get-ADPrincipalGroupMembership -Identity $fsp -Server $trustedDomain | Select-Object Name, DistinguishedName, GroupCategory
}

# 6. 合并并输出结果
$allGroups = $domain1Groups + $domain2Groups
Write-Host "=== 用户 $userName 在两个域的全部组成员身份 ==="
$allGroups | Format-Table -AutoSize

关键步骤解释

  • 步骤4:FSP的ObjectSID和原用户的SID完全匹配,用这个条件能精准定位,避免找错对象。
  • 步骤5:如果用户没有被添加到信任域的任何组,$fsp会是空值,加判断能避免报错。
  • Get-ADPrincipalGroupMembership已经自动处理了嵌套组层级(比如用户在GroupA,GroupA又在GroupB,会把GroupB也列出来),不用额外写递归逻辑。

新手注意事项

  1. 确保运行脚本的账号有两个域的读取权限,不然会出现访问被拒绝的报错。
  2. 如果要查多个信任域,可以把$trustedDomain改成数组(比如$trustedDomains = @("Domain2", "Domain3")),再加个循环遍历每个域即可。
  3. 要是需要把结果导出到CSV,最后加一句:$allGroups | Export-Csv -Path "C:\UserGroups.csv" -NoTypeInformation -Encoding UTF8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:11