如何使用 Ruby 从 Active Directory 中检索已删除的对象?

How can I retrieve deleted objects from Active Directory with Ruby?

根据我所做的研究,我似乎需要在请求 (1.2.840.113556.1.4.417) 中发送一个特殊的 OID 才能访问已删除对象容器。

我找不到使用 "net-ldap" gem 发送带有请求的特定控件的方法。有谁知道这是否可能?

还有另一个 gem、ruby-ldap,它似乎更灵活,而且我 可以 发送带有我的请求的控件(例如使用 search_ext2() 方法)。

但是,无论我尝试什么,我都没有取回任何对象,即使我知道它们还没有被垃圾回收。

我也在请求中包含过滤器 "isDeleted=TRUE"。

您尝试过 isDeleted=* 吗?

https://technet.microsoft.com/en-us/library/cc978013.aspx

好的,我终于想通了。一会需要用到ruby-ldapgem。我的控件未被发送的原因是因为 LDAP 协议版本 (LDAP::LDAP_OPT_PROTOCOL_VERSION) 默认为 v2,显然它必须是 v3。

以下是有效的片段:

require 'ldap'

conn = LDAP::Conn.new('yourserver.example.com', 389)
conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
conn.bind("CN=Administrator,CN=Users,DC=example,DC=com", "sekritpass")

# controlType: 1.2.840.113556.1.4.417 (LDAP_SERVER_SHOW_DELETED_OID)
control = LDAP::Control.new('1.2.840.113556.1.4.417')

conn.search_ext2('CN=Deleted Objects,DC=example,DC=com', LDAP::LDAP_SCOPE_SUBTREE, "(isDeleted=*)", nil, false, [control], nil)

过滤器 (isDeleted=*) 不是必需的,您也可以简单地使用 (objectClass=*)。如果需要,您还可以使用范围 LDAP::LDAP_SCOPE_ONELEVEL