powershell - 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)对象。
解决方案
问题在于需要格式化数据的方式。您可以使用用户 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}
推荐阅读
- excel - 销售清单到采购清单 Excel
- autoit - 恶意 Autoit v3 快捷方式
- perl - 如何用新的文本块替换一个文本块?
- node.js - Promise.all 对象映射搞乱了数据的排序
- javascript - 在 webpack 捆绑的 vue 3 插件中未触发 onMounted 的回调
- python - Django 获取特定用户的所有列的总和
- python - Linux 上可移植的 VS Code 仍然用于包本地用户文件夹而不是环境文件夹,因此导入失败
- flutter - 是否有任何命令可以在具有已知坐标 x 和 y 点的同一手机 android 中运行其他应用程序?比如点击指向该应用程序
- python - 尽管安装命令没有名为“PIL”的模块
- html - 具有相同高度和边距的元素显示不同