You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell使用S.DS.P写入LDAP对象报对象类违规错误

报错原因

对象类违规是LDAP服务端对新增请求做schema校验时,发现提交的内容不符合对象类定义触发的,你的代码存在两个直接触发错误的问题:

  • objectClass属性格式错误:你传入的是带大括号的逗号分隔字符串"{dominoServerMailInDatabase, top}",S.DS.P模块不会将其解析为多值属性,会把整串当成单个objectClass值提交,Domino LDAP服务无法识别该值,直接触发校验失败。
  • 提交了对象类不允许的属性:你定义并赋值了cn属性,还将cn作为DN的RDN前缀,但你提供的dominoServerMailInDatabase schema定义中,必选、可选属性列表均不包含cn属性,属于对象类禁止持有的非法属性。

另外你代码中部分属性名和schema定义的命名不匹配,比如maildomain对应schema中的MailDomain、encryptincomingmail对应EncryptIncomingMail,Domino LDAP对属性名校验严格,大小写/拼写不匹配也可能触发后续报错。

修复方案
  1. 修正objectClass赋值:传入字符串数组而非带大括号的字符串,正确写法为$Object.objectClass = @("top", "dominoServerMailInDatabase")
  2. 移除非法的cn属性,将DN的RDN替换为对象类允许持有的属性,比如使用mail属性作为RDN
  3. 所有属性名严格对齐schema中的命名,避免拼写、大小写不匹配的问题

修复后的可运行参考代码:

$Object = [PSCustomObject]@{
    distinguishedName = $null
    objectClass = $null
    mail = $null
    MailDomain = $null
    MailServer = $null
    MailFile = $null
    description = $null
    MessageStorage = $null
    EncryptIncomingMail = $null
    AvailableForDirSync = $null
    displayName = $null
}

# 使用schema允许的mail属性作为RDN
$Object.distinguishedName = "mail=testmailinfromscript@test.com,ou=GB,o=ORG"
# objectClass传标准字符串数组
$Object.objectClass = @("top", "dominoServerMailInDatabase")
$Object.mail = "testmailinfromscript@test.com"
$Object.MailDomain = "some-domain"
$Object.MailServer = "CN=SERVER,OU=GB,O=ORG"
$Object.MailFile = "shadow account"
$Object.description = "shadow account"
$Object.MessageStorage = "1"
$Object.EncryptIncomingMail = "0"
$Object.AvailableForDirSync = "1"
$Object.displayName = "testmailinfromscript/GB/ORG"

Add-LdapObject -LdapConnection $ldap -Object $Object -Verbose

如果修复后仍报错,可以抓包看LDAP请求的实际提交内容,确认没有多余的非法属性被模块自动附加。

内容的提问来源于stack exchange,提问作者Matt__68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:18:33