【发布时间】:2021-07-23 12:58:53
【问题描述】:
我正在尝试使用带有 -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)对象。
【问题讨论】:
标签: powershell active-directory