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

如何在perl中读取大量LDAP条目?,perl,active-directory,ldap,Perl,Active Directory,Ldap,我已经有了一个LDAP脚本,可以逐个读取LDAP用户信息。我的问题是,我正在返回在Active Directory中找到的所有用户。这将不起作用,因为目前我们的广告有大约100000个用户,导致脚本由于内存限制而崩溃 我想做的是尝试以X数量的用户批量处理用户,如果可能的话,使用线程来并行处理一些用户。唯一的问题是,我刚刚开始使用Perl,所以我想知道是否有人能给我一个关于如何使用Perl的大致想法。如果您可以让可执行文件ldapsearch在您的环境中工作(并且它在*nix和Windows中工作

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


我想做的是尝试以X数量的用户批量处理用户,如果可能的话,使用线程来并行处理一些用户。唯一的问题是,我刚刚开始使用Perl,所以我想知道是否有人能给我一个关于如何使用Perl的大致想法。

如果您可以让可执行文件
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
}
my$LDAP\u SEARCH=“ldapsearch-h$LDAP\u SERVER-p$LDAP\u PORT-b$BASE-D uid=$LDAP\u USERNAME-w$LDAP\u PASSWORD-LLL”;
my@LDAP_FIELDS=qw(uid邮件管理器电话号码成本中心NTLogin显示名称);
打开(LDAP,“-”:utf8“,“$LDAP\u搜索\“$FILTER\”。加入(“,@LDAP\u字段”);
而(){
#处理每个LDAP响应
}
我使用它来读取近100K的LDAP条目,而不会出现内存问题(尽管仍然需要30分钟或更长时间)。您需要定义
$FILTER
(或将其留空),当然还需要定义所有LDAP服务器/用户名/密码

如果您想/需要使用更纯的Perl版本,我最好使用
Net::LDAP
而不是
Net::LDAP::Express
,特别是对于大型查询