2011-05-19 106 views
6

我想筛选CN不等于sAMAccountName的所有LDAP对象。所以我写了下面的查询,不幸的是既不工作也不似乎是符合RFC:LDAP比较属性

(!(cn=sAMAccountName))

有谁知道如何acheive所需的功能?

问候 托马斯

+0

这个问题似乎并不合理。你真的想要检索每一条记录吗*除了那个?你的实际需求是什么? – EJP 2011-05-19 10:35:15

+0

如上所述,我想检索公用名称不等于sAMAccountName的所有对象(在我的情况下为用户)。我认为查询会是(cn!= sAMAccountName),它也可以写成(!(cn = sAMAccountName))...但显然,我不是LDAP专家:) – Thomas 2011-05-22 09:14:41

+0

不,那只是返回所有记录'cn'属性没有值'sAccountName',被视为文字。我不认为你可以写一个你想要的过滤器。只有LHS被视为属性名称。 – EJP 2011-05-23 04:28:40

回答

0

(!(cn=sAMAccountName))是“符合RFC”,因为声明的右侧被认为是cn属性的值。

使用该过滤将导致所有条目中搜索响应,其中cn属性的值存在被返回,和为不区分大小写的值samaccountname(假设cn属性匹配规则具有cn返回false匹配规则没有从公布的标准改变)。结果将受:

  • 服务器时限
  • 服务器的大小限制

也许你的意思

  • 服务器的访问控制使用

    • cn=value-of-samaccount-name
  • 0

    如果您处于Windows环境中,则可以使用PowerShell表达式语言来执行此操作。

    Get-ADUser -Filter * -Server my.domain.name -Properties CN | 
        Where-Object {$_.CN -ne $_.sAMAccountName} 
    

    这是一个相当昂贵的查询,因为它返回每个用户对象的PowerShell做处理,但它确实有效。

    0

    LDAP过滤器不允许使用另一个属性的值进行过滤器比较。您必须获取条目并比较两个值。