2011-05-19 178 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過濾器不允許使用另一個屬性的值進行過濾器比較。您必須獲取條目並比較兩個值。