2015-04-01 35 views
2

如果您删除Windows AD中的用户或组,它将在“DElETE对象”中。 我想用python ldap lib来获取它们。 代码:得到删除AD用户/组由python-ldap

<code> 
import ldap 
uri = "ldap://10.64.74.17" 
user = "XXXXXXXXXX" 
password = "XXXXXXXXXXXX" 
ldap.set_option(ldap.OPT_REFERRALS, 0) 
ldap.set_option(ldap.OPT_NETWORK_TIMEOUT, 5) 
ldap.protocol_version = 3 
ldapClient = ldap.initialize(uri) 
ldapClient.simple_bind_s(user, password) 
filter = "(&(objectclass=person)(isDeleted=true)(!(objectclass=computer)))" 
results = ldapClient.search_s("DC=xx,DC=com", ldap.SCOPE_SUBTREE,filter) 
for result in results: 
    print result 
ldapClient.unbind_s() 
</code> 

它无法显示已删除的对象。 这段代码有什么问题?

回答

1

您需要为搜索添加ldap control。它看起来像这样。基本上为特定的操作创建请求控制(在你的情况下,这个AD的OID是1.2.840.113556.1.4.417)。然后将一组控件作为可选参数传递给您的搜索请求。

tombstone_control = ('1.2.840.113556.1.4.417',criticality=1) 
results = ldapClient.search_s("DC=xx,DC=com", ldap.SCOPE_SUBTREE,filter, [tombstone_control]) 

我认为这将起作用。您也可以将搜索范围的范围限制在CN=Deleted Objects, DC=xx,DC=com,因为这是所有被删除的对象最终结束的地方。你应该确保你的删除对象在那里。您可以使用ldp.exe进行检查。