PowerShell域控制器用户复制不同步memberOf属性问题排查
域控制器用户对象复制无法同步memberOf属性的问题排查与解决
执行PowerShell脚本同步域控制器用户对象时,其他配置文件属性均可正常同步,但memberOf(组成员身份)属性无法同步,使用的脚本如下:
$users = 'wtst, tst' $usersArray = $users.Split(',') Invoke-Command -ScriptBlock {` $using:usersArray | ForEach-Object {` (Write-Output "Processing user $($_)..."), ` ((Sync-ADObject -Object "CN=$_,OU=XXXX,DC=XXXX,DC=XXXX" -Source 'XXXX' -Destination 'XXXX')) } } -ComputerName 'XXXX' -Credential $(Get-Credential)
问题原因与修正方案
Sync-ADObject默认不同步反向链接属性
memberOf属于AD的反向链接属性,这类属性由正向链接(组对象的member属性)自动生成维护,Sync-ADObject默认不会同步此类属性。必须通过-Properties参数显式指定要同步memberOf,同时确保执行账号拥有源域组信息的读取权限和目标域用户对象的写入权限。用户数组存在空格问题
原脚本中$users.Split(',')会生成带前导空格的用户标识(比如' tst'),导致构建的LDAP路径CN=$_,OU=XXXX,...无效。需要添加Trim()处理去除空格:$usersArray = $users.Split(',').Trim()脚本语法冗余与输出优化
原脚本的换行反引号和逗号拼接输出的写法冗余且易造成日志混乱,可简化为更清晰的写法,同时确保同步命令显式指定属性:
修正后的脚本示例
$users = 'wtst, tst' $usersArray = $users.Split(',').Trim() Invoke-Command -ScriptBlock { foreach ($user in $using:usersArray) { Write-Host "Processing user $user..." Sync-ADObject -Object "CN=$user,OU=XXXX,DC=XXXX,DC=XXXX" ` -Source 'XXXX' ` -Destination 'XXXX' ` -Properties 'memberOf' } } -ComputerName 'XXXX' -Credential $(Get-Credential)
额外注意事项
- 如果目标域中组的DN与源域不一致,
memberOf属性同步后可能无效,需确保组对象已在目标域存在且DN匹配,或使用-SourceCredential和-DestinationCredential参数分别指定源域和目标域的权限账号。 - 同步后可通过
Get-ADUser $user -Properties memberOf在目标域验证属性是否生效。
内容的提问来源于stack exchange,提问作者colonel_claypoo
相关产品推荐
相关产品推荐

