2014-06-23 18 views
1

我已經有一個LDAP腳本來逐一讀取LDAP用戶信息。我的問題是我返回在Active Directory中找到的所有用戶。這是行不通的,因爲目前我們的AD有大約100,000個用戶,由於內存限制導致腳本崩潰。如何讀取perl中的大量LDAP條目?

我想要做的是嘗試通過批量X用戶批量處理用戶,如果可能的話,使用線程來並行處理一些用戶。唯一的是我剛開始使用Perl,所以我想知道是否有人能夠給我一個關於如何做到這一點的總體思路。

+1

http://perldoc.perl.org/Thread/Queue.html –

回答

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更好,尤其是對於大型查詢。