Вы можете использовать правило ruleOID LDAP_MATCHING_RULE_BIT_AND, чтобы проверить UserAccountControl.
Я использую этот фильтр, чтобы найти пользователей, которые включены:
(&(objectCategory=organizationalPerson)(objectClass=User)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
UserAccountControl: 1.2.840.113556.1.4.803 будет Бит 2 набора, если учетная запись отключена.
The value of ruleOID can be one of the following:
• 1.2.840.113556.1.4.803 - Это правило LDAP_MATCHING_RULE_BIT_AND. Правило сопоставления истинно, только если все биты из свойства соответствуют значению. Это правило похоже на побитовый оператор И.
• 1.2.840.113556.1.4.804 - Это правило LDAP_MATCHING_RULE_BIT_OR. Правило сопоставления истинно, если любые биты из свойства соответствуют значению. Это правило похоже на побитовый оператор OR.
Примером может служить запрос Active Directory для объектов класса пользователя, которые отключены. Атрибутом, который содержит эту информацию, является атрибут userAccountControl. Этот атрибут состоит из комбинации разных флагов. Флаг для установки объекта, который вы хотите отключить, - UF_ACCOUNTDISABLE, который имеет значение 0x02 (2 десятичных числа). Сравнение побитового фильтр, который определяет UserAccountControl с установленным битом UF_ACCOUNTDISABLED будет напоминать это: (UserAccountControl: 1.2.840.113556.1.4.803: = 2)
Спасибо за указание метода Net :: LDAP :: Filter.construct !! Однако обратите внимание, что если вы скопируете свой запрос из строки сохраненного запроса AD, Net :: LDAP любит фильтры NOT (!), Которые будут окружены дополнительным набором скобок, как указано в вашем примере, какой инструмент Microsoft не использует, t использовать. – jlbenc