Your code should pull all the users with a specified manager.
 
While there is a limit of 1000 objects that AD will pull back in an AD
query, we've written a paged query (  $Cmd->{Properties}->{"Page Size"}
= 99), to get around that limitation so I would start by modifying your
query to change:

(&(objectclass=User)(manager=*))

To:

(objectclass=User)

And note the differences of results..  I am guessing that will show your
missing 1000+ users.

HTH
Steven
________________________________

        From: A F [mailto:perl95...@yahoo.com] 
        Sent: Wednesday, March 16, 2011 11:09 PM
        To: Steven Manross; perl-win32-admin@listserv.ActiveState.com
        Subject: LDAP query limit in AD?
        
        
        Is there a limit on the number of record when doing a AD query
with LDAP?
        I am getting only 1000 records from this script. We have more
than 2000+ users in our AD.
        Any idea how to increase the limit to get everything?
         
         
        use Win32::OLE;
        my $RootDSE = Win32::OLE->GetObject("LDAP://RootDSE");
         
        
        $dc = $RootDSE->Get("DnsHostName");
        print "$dc\n";
        query_ldap("<LDAP://" . $dc .
">;(&(objectclass=User)(manager=*));displayname,distinguishedname;subtre
e",$objects);
         
        print "recordcount = ".$objects->{RecordCount}."\n";
        while (!$objects->{EOF}) {
        
getattributes($dc,$objects->Fields("distinguishedname")->{Value});
          $objects->MoveNext();
        }
        sub query_ldap {
          my $ldap_query = $_[0];
          my $error_num;
          my $error_name;
          my $RS;
          my $Conn = Win32::OLE->new("ADODB.Connection");
          if (Win32::OLE->LastError() != 0) {
            print "Failed creating ADODB.Connection object
(".Win32::OLE->LastError().")\n   -> $ldap_query\n";
            return 0;
          }
          $Conn->{'Provider'} = "ADsDSOObject";
          if (Win32::OLE->LastError() != 0) {
            print "Failed setting ADODB.Command Provider
(".Win32::OLE->LastError().")\n   -> $ldap_query\n";
            return 0;
          }
          $Conn->{Open} = "Perl Active Directory Query";
          my $Cmd = Win32::OLE->new("ADODB.Command");
          if (Win32::OLE->LastError() != 0) {
            print "Failed creating ADODB.Command object
(".Win32::OLE->LastError().")\n   -> $ldap_query\n";
            return 0;
          }
          $Cmd->{CommandText} = $ldap_query;
          $Cmd->{Properties}->{"Page Size"} = 99;
          $Cmd->{ActiveConnection} = $Conn;
          $RS = $Cmd->Execute();
          if (Win32::OLE->LastError() != 0) {
            print "Failed Executing ADODB Command object
(".Win32::OLE->LastError().")\nExecuting ADODB Command ->
$ldap_query\n";
            return 0;
          } else {
            $_[1] = $RS;
            return 1;
          }
        }
        sub getattributes  {
          my $dc = $_[0];
          my $dn = $_[1];
          my $adsuser = Win32::OLE->GetObject("LDAP://$dc/$dn") || die
("Can't find user: ".Win32::OLE->LastError()."\n");
          print "$adsuser->{cn}\t"; 
          print "$adsuser->{EmailAddress}\t";
          print "$adsuser->{department}\t";
          print "$adsuser->{PhysicalDeliveryOfficeName}\t";
          print "  Manager: $adsuser->{Manager}\n";
        }
        

         


_______________________________________________
Perl-Win32-Admin mailing list
Perl-Win32-Admin@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to