首页 > 解决方案 > PowerShell Set-ADGroup 替换成员多个域 (FSP)

问题描述

我正在尝试使用带有 -Replace 参数的 Set-ADGroup 设置组的成员资格。我试过了

$adUsers = @()
$adUsers += Get-ADUser -Server domain1.corp.com -Identity user1
$adUsers += Get-ADUser -Server domain2.corp.com -Identity user2

$adUsers = $adUsers | select-object -expandproperty distinguishedname

Set-ADGroup -Server domain3.corp.com -Identity mygroup -Replace @{Member=$adUsers}

但这失败了

The specified account does not exist.

如果您查看我之前的尝试,您可能已经注意到我的用户对象来自两个不同的域,而我的组来自第三个域。

因此,为了测试我的代码,我简化了设置并尝试使用来自与组所在域相同域的用户

$adUsers = @()
$adUsers += Get-ADUser -Server domain3.corp.com -Identity user4
$adUsers += Get-ADUser -Server domain3.corp.com -Identity user5

$adUsers = $adUsers | select-object -expandproperty distinguishedname

Set-ADGroup -Server domain3.corp.com -Identity mygroup -Replace @{Member=$adUsers}

这行得通。

所以我认为 AD 模块可能不喜欢 FSP。

但后来我运行了以下代码:

$adUsers = @()
$adUsers += Get-ADUser -Server domain1.corp.com -Identity user1
$adUsers += Get-ADUser -Server domain2.corp.com -Identity user2

Add-ADGroupMember -Server domain3.corp.com -Identity mygroup -Members $adUsers

这有效。因此,似乎在 AD 模块中使用 FSP 肯定是可能的。

但为什么它不适用于 Set-ADGroup?

我应该使用与专有名称不同的名称吗?我尝试使用 SID 的字符串表示,但这似乎更糟(发生内部错误)。

我知道我可以使用 Remove-ADGroupMember 和 Add-ADGroupMember 的组合来使我的代码正常工作,但这似乎效率低下,因为我必须首先弄清楚要删除哪些用户。用正确的条目替换成员列表似乎更高效。

更新经过更多测试后,我发现将 FSP 与 Set-ADGroup 结合使用是可行的。所以我可以使用'CN=S-1-5-21-xxx-yyy-zzz-rid,CN=ForeignSecurityPrincipals,DC=DOMAIN3,DC=CORP,DC=com'。当然,这意味着 FSP 对象已经存在于 DOMAIN3 中。因为如果它没有并且我伪造了专有名称,那么该方法在逻辑上只是返回

Set-ADGroup: An internal error occurred.

现在我想知道Set-ADGroup -replace方法是否只能与现有对象一起使用,同时Add-ADGroupMember也可以创建(FSP)对象。

标签: powershellactive-directory

解决方案


问题在于需要格式化数据的方式。您可以使用用户 SID,但它必须采用格式<SID=S-1-5-21-xxx-yyy-zzz-rid>。这样,FSP 也会在必要时自动创建

所以我的代码最终是这样的:

[string[]]$sids= @()
$sids+= Get-ADUser -Server domain1.corp.com -Identity user1 -Properties @('SID') | ForEach-Object { '<SID=' + $_.SID + '>'}
$sids+= Get-ADUser -Server domain2.corp.com -Identity user2 -Properties @('SID') | ForEach-Object { '<SID=' + $_.SID + '>'}

Set-ADGroup -Server domain3.corp.com -Identity mygroup -Replace @{Member=$sids}

推荐阅读