【问题标题】:PowerShell Set-ADGroup replace member multiple domains (FSP)PowerShell Set-ADGroup 替换成员多个域 (FSP)
【发布时间】: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


    【解决方案1】:

    问题在于需要格式化数据的方式。您可以使用用户 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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多