我将如何build立一个AD的LDAP查询,返回一个特定安全组中的帐户没有被禁用的所有用户?

我将如何build立一个AD的LDAP查询,返回一个特定安全组中的帐户没有被禁用的所有用户?

我试过了

(&(objectClass = person)(!(userAccountControl = ACCOUNTDISABLE )))

但似乎并不奏效。

我正在尝试设置Google Apps Directory Sync,并希望它能够同步所有属于“Google Apps用户”安全组的帐户未被禁用的用户(或者,如果在AD中被禁用,则只需挂起GA中的帐户)。

有时候通过设置不同的位来将一组是/否的值存储在单个值中。 你可以使用一个位掩码来检查它们是否被设置。

例如,十进制中的546是二进制值10 0010 0010 – 十进制中的512,32和2的总和(所有这些数字都是2的幂,这意味着它们的二进制表示中只有一个'1')。 :这意味着这三个是/否的值被设置。

根据userAccountControl文档 ,这意味着以下值被设置:

NORMAL_ACCOUNT (512) PASSWD_NOTREQD (32) ACCOUNTDISABLE (2) 

但是,例如,如果您的用户没有设置PASSWD_NOTREQD (所以他们的userAccountControl值是512),或者也有一个设置了DONT_EXPIRE_PASSWORD (65536)(意思是它们的值是66082)的用户,您不会在这个用户中find您的查询。

你需要做的是使用按位AND来查询只有该位的值:

 10 0010 0010 00 0000 0010 ------------ 00 0000 0010 

如果该位的值是1,那么该位被设置。 不pipe什么其他位设置,所以你有效地问,如果userAccountControl & 2 == 2

使用AND检查位的LDAP语法是1.2.840.113556.1.4.803,因此您可以看到ACCOUNTDISABLE位是否设置为(userAccountControl:1.2.840.113556.1.4.803:= 2)。 在它周围添加(!(foo))会为所有未被禁用的用户提供帮助。

看起来像这样会工作,但它不会拿起嵌套的组成员:

 (& (memberOf=CN=GApsUsers,DN=....) (!(userAccountControl=546)) ) 

这工作!

 (&(memberOf=CN=Google Apps Users,DC=bbc,DC=pri)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) 

closures但是

(&(objectClass的=人)(!(userAccountControl的= ACCOUNTDISABLE)))

应该

(&(objectClass的=人)(!userAccountControl的= ACCOUNTDISABLE))

请注意,我不能从我所在的地方真正地testing这个。