You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

跨信任域复制AD组成员至另一组失败求助

解决跨域AD组成员复制问题

首先,你的代码存在语法错误:把Get-ADGroupMemberAdd-ADGroupMember两个命令写在了同一行,没有正确分隔,而且目标组的DN字符串前后有多余空格,这些都会导致PowerShell无法正确解析命令。这是第一个需要修正的点。

其次,跨域复制AD组成员时,直接传递Get-ADGroupMember返回的对象会失败——来自信任域的成员在当前域中是以ForeignSecurityPrincipal(外部安全主体)的形式存在的,PowerShell无法直接识别跨域的AD对象实例。

修正后的完整解决方案

以下是可以处理跨域成员的脚本:

# 定义源组和目标组的DN,注意去掉多余空格
$SourceGroupDN = "CN=Team1_ReadOnly, OU=Team1,OU=TEAM_GROUPS,OU=Groups,OU=Business,DC=Server1,DC=Contoso,DC=com"
$TargetGroupDN = "CN=Team2_ReadOnly, OU=Team2,OU=TEAM_GROUPS,OU=Groups,OU=Business,DC=Server1,DC=Contoso,DC=com"
$DomainServer = "Server1@contoso.com"

# 1. 获取源组的所有成员(包括跨域的),提取SID属性
$SourceMemberSIDs = Get-ADGroupMember -Identity $SourceGroupDN -Server $DomainServer -Recursive | Select-Object -ExpandProperty SID

# 2. 处理每个成员,转换为当前域可识别的对象
$ValidMembers = $SourceMemberSIDs | ForEach-Object {
    $sid = $_
    try {
        # 本地域成员直接获取AD对象
        Get-ADObject -Identity $sid -Server $DomainServer
    }
    catch {
        # 跨域成员创建ForeignSecurityPrincipal引用
        New-Object Microsoft.ActiveDirectory.Management.ADObject -Property @{
            ObjectClass = "foreignSecurityPrincipal"
            DistinguishedName = "CN=$sid,CN=ForeignSecurityPrincipals,DC=Server1,DC=Contoso,DC=com"
        }
    }
}

# 3. 将处理后的成员添加到目标组
Add-ADGroupMember -Identity $TargetGroupDN -Server $DomainServer -Members $ValidMembers

关键说明

  • 语法修正:拆分了原本连在一起的命令,同时清理了目标组DN里的多余空格,避免识别失败。
  • 跨域处理:通过SID来引用跨域成员,将其转换为当前域的ForeignSecurityPrincipal对象,让Add-ADGroupMember可以正确识别并添加。
  • -Recursive参数:如果源组包含嵌套组,这个参数会获取所有层级的成员;不需要的话可以直接去掉。

如果执行仍有问题,可以检查:

  • 你的账号是否同时拥有跨域读取源组成员、修改目标组的权限
  • 当前域与信任域之间的双向信任关系是否正常

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

火山引擎 最新活动