如何读取perl中的大量LDAP条目?

时间:2014-06-23 16:50:56

标签: perl active-directory ldap

我已经有了一个LDAP脚本,以便逐个读取LDAP用户信息。我的问题是我返回在Active Directory中找到的所有用户。这不起作用,因为目前我们的AD有大约100,000个用户,导致脚本因内存限制而崩溃。

我想做的是尝试按批量X用户处理用户,如果可能的话,使用线程来并行处理某些用户。唯一的问题是我刚刚开始使用Perl,所以我想知道是否有人能给我一个如何做到这一点的一般概念。

1 个答案:

答案 0 :(得分:0)

如果你可以让可执行文件ldapsearch在你的环境中工作(并且它在* nix和Windows中工作,虽然语法通常不同),你可以尝试这样的事情:

my $LDAP_SEARCH = "ldapsearch -h $LDAP_SERVER -p $LDAP_PORT -b $BASE -D uid=$LDAP_USERNAME -w $LDAP_PASSWORD -LLL";
my @LDAP_FIELDS = qw(uid mail Manager telephoneNumber CostCenter NTLogin displayName);
open (LDAP, "-|:utf8", "$LDAP_SEARCH \"$FILTER\" " . join(" ", @LDAP_FIELDS));
while (<LDAP>) {
  # process each LDAP response
}

我用它来读取几乎没有内存问题的100K LDAP条目(虽然它仍然需要30分钟或更长时间)。您需要定义$FILTER(或将其留空),当然还有所有LDAP服务器/用户名/密码件。

如果你想/需要做一个更纯粹的Perl版本,我的运气好Net::LDAP而不是Net::LDAP::Express,特别是对于大型查询。