根據我讀過的所有文檔,查詢Active Directory時結果集的最大大小爲1000條記錄。如果你需要超過1000個,你會被告知使用Net :: LDAP :: Control :: Paged來遍歷並獲得超過1000條記錄,這是我試圖做的。出於某種原因,儘管使用了分頁控件,但我仍然只獲得1000條記錄。我使用的是與其他人聲稱使用相同的代碼而沒有任何運氣。我在這裏錯過了什麼嗎?請注意,我沒有對AD服務器的管理訪問權限,因此更改配置不適合我。我粘貼了下面的相關代碼,以便您可以指出我可能做錯的任何事情。SizeLimit超出使用Net :: LDAP :: Control :: Paged
#!perl -w
use strict;
use Net::LDAP;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant qw(LDAP_CONTROL_PAGED);
my $LDAPServer = "<LDAP SERVER ADDRESS>";
my $base = "<BASE DN>";
my $user = "<LDAP USER>";
my $pass = "<PASSWORD>";
my $page = Net::LDAP::Control::Paged->new(size => 1000) or die $!;
my $errorConnectionStr = "";
my $ldap;
my $mesg;
my $cookie;
$ldap = Net::LDAP->new($LDAPServer);
$mesg = $ldap->bind($user, password => $pass, version => 3);
open(OUT,">users.csv");
print OUT "sAMAccountName,sn,givenName\n";
my $filter = "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(!(objectClass=computer)))";
my @attribs = ("sn", "givenName", "sAMAccountName", "distinguishedName");
my @args = (
base => $base,
scope => 'sub',
filter => $filter,
attrs => @attribs,
pagesize => 1000,
control => [$page]
);
while(1) {
$mesg = $ldap->search(@args) or die $!;
while (my $entry = $mesg->pop_entry()) {
my $print = 1;
my $dn = $entry->dn();
my $uid = $entry->get_value('sAMAccountName');
my $ln = $entry->get_value('sn');
my $fn = $entry->get_value('givenName');
if($dn =~ m/.*Resources.*/) {
$print = 0;
}
if(defined($uid) && defined($ln) && defined($fn)) {
if($print == 1) {
print OUT "$uid,$ln,$fn\n";
}
}
}
my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;
$cookie = $resp->cookie or last;
$page->cookie($cookie);
}
if($cookie) {
print "Abnormal exit\n";
$page->cookie($cookie);
$page->size(0);
$ldap->search(@args);
}
close(OUT);
$ldap->unbind;
我相信這已經回答[這裏](http://stackoverflow.com/questions/5830860/increase-limit-from-1000)。 – sferencik
@sferencik不,我在示例中使用的代碼是使用LDAP :: Control :: Paged作爲您鏈接的頁面在其答案中解釋的。您鏈接的問題是詢問如何返回超過1000條記錄,並且提供的答案是使用與我試圖使用的相同的控件不起作用。 –