Я работаю с LDAP Active Directory и пытаюсь составить список всех пользователей.У меня есть этот фильтр, который прекрасно работает:
(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
К сожалению, у нас также есть компьютерные блоки и другие устройства, представленные в AD с объектным классом «пользователь», поэтому с предыдущим фильтром я получил всех пользователей, компьютеры, устройства, комнатыи т. д.
У этих компьютеров и устройств также есть объектный класс "компьютер", поэтому мне нужно расширить фильтр с помощью объектного класса! = "компьютер", чтобы получить список только реальных пользователей.До сих пор я пробовал эти фильтры, ни один из них не работал (данные не возвращались!):
(&(objectclass=user)(!objectclass=computer)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(&(objectclass=user)(!(objectclass=computer))(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!(objectclass=computer))(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!objectclass=computer)(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(у реальных пользователей нет объектного класса "компьютер").
Яработа с реализацией PHP ldap, поэтому используется метод ldap_search()
.
Синтаксис "не равно" найден, например, здесь: http://technet.microsoft.com/en-us/library/aa996205%28EXCHG.65%29.aspx или здесь: http://msdn.microsoft.com/en-us/library/aa746475%28v=vs.85%29.aspx
Может бытьЯ мог бы попытаться отфильтровать пользователей, где (! CN = Computers) в DN, но сначала я бы хотел отфильтровать (! Objectclass = computer), так как это более логично для меня.
Какой правильный синтаксис для objectclass! = "Компьютер" выражение?