Active Directory PowerShell脚本添加用户时出现无效DN语法错误
解决AD用户添加到安全组的无效DN语法错误
问题根源
你推测的没错,问题出在用户DN中的逗号转义逻辑上。Get-ADUser返回的DistinguishedName里的反斜杠是PowerShell字符串的转义方式,但LDAP路径解析器不认可这种转义规则,导致识别DN时出现语法错误。
两种可行解决方案
方案1:给DN包裹双引号
修改Add方法的参数,用双引号包裹整个DN,让LDAP解析器正确识别特殊字符:
$tmp = Get-ADUser -Filter "SamAccountName -eq '$user'" Write-Host "User DN name -> " $tmp.DistinguishedName # 给DN添加双引号包裹,PowerShell用反引号转义双引号 $group.Add("LDAP://`"$($tmp.DistinguishedName)`"") $group.CommitChanges()
方案2:用ObjectGUID构造LDAP路径(更推荐)
直接使用用户的ObjectGUID生成LDAP路径,完全避开DN特殊字符的转义问题,这种方式更稳定可靠:
$tmp = Get-ADUser -Filter "SamAccountName -eq '$user'" Write-Host "User DN name -> " $tmp.DistinguishedName # 用ObjectGUID构造LDAP路径 $userGuid = [GUID]$tmp.ObjectGUID $group.Add("LDAP://<GUID=$userGuid>") $group.CommitChanges()
补充说明
LDAP路径中,当DN包含逗号、等号、加号等特殊字符时,需要通过包裹双引号来明确这些字符属于DN的一部分,而非DN的分隔符。而使用ObjectGUID的方式则完全绕开了DN的字符串解析问题,是处理AD对象操作更稳妥的通用方法。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

