Hi Randy, there are no bulk operation commands in ldap. You'll have to run for each user one ldap query. In the query you've to include the attributes which hold the desired user information.
If you already have the fully qualified CN you also might use the adsi interface instead of the ldap interface. Regards, Uri ############################################################################## # CHANGE DISPLAY NAME ############################################################################## # AUTHOR: # DATE: ############################################################################## # # 04-09-27 Creation # ############################################################################## use strict; use Net::LDAP; use Win32API::Net qw(GetDCName); # LDAP ACCESS DATA my $user = '[EMAIL PROTECTED]'; my $pwd = 'PASSWORD'; my $dc = 'YOURDOMAIN'; my $domain = lc $ENV{USERDOMAIN}; # GET NAMING CONTEXT my $namingContext = getNamingContext($domain); # SEARCH PARAMETERS my $base = $namingContext; my $scope = "subtree"; my $attrs = qw (displayName distinguishedName userPrincipalName extensionAttribute11 extensionAttribute12); # my $filter = "(&(objectclass=user)(objectcategory=user)(givenName=Henry)(sn=Miller))"; # USER LIST my $userList = 'c:/data/allUsers.txt'; my @userList = open(USERLIST, "<$userList"); # CONNECT my $ldap = Net::LDAP->new($dc) or die "Connection failed!", $@; # BIND TO LDAP USER my $rc = $ldap->bind( $user, password => $pwd); die $rc->error if $rc->code; # SEARCH LDAP FOR EACH USER for my $userID (@userList) { my $filter = "(&(objectclass=user)(objectcategory=user)(cn=$userID))"; my $search = $ldap->search (base => $base, scope => $scope, filter => $filter, attrs => $attrs); if ($search->code) { print $search->error; next; } processResults($search); } # UNBIND $ldap->unbind; exit; ############################################################################## # PROCESS RESULTS ############################################################################## sub processResults { ############################################################################## my ($search) = @_; print "\n********************************************************************\n"; print "Displaying certain Results...\n"; print "********************************************************************\n"; # DISPLAY CERTAIN SEARCH RESULTS for my $entry ($search->entries) { my $displayName = $entry->get_value('displayName'); print "displayName: $displayName\n"; my $distinguishedName = $entry->get_value('distinguishedName'); print "distinguishedName: $distinguishedName\n"; my $extensionAttribute11 = $entry->get_value('extensionAttribute11'); print "extensionAttribute11: $extensionAttribute11\n"; my $extensionAttribute12 = $entry->get_value('extensionAttribute12'); print "extensionAttribute12: $extensionAttribute12\n"; } } ############################################################################## # GET DEFAULT NAMING CONTEXT ############################################################################## sub getNamingContext { my ($domain) = @_; my ($ldap, $rootdse, $defaultNamingContext); $ldap = Net::LDAP->new($domain) or die $@; $rootdse = $ldap->root_dse(attrs => ['defaultNamingContext']); $defaultNamingContext = $rootdse->get_value('defaultNamingContext'); return $defaultNamingContext; } use strict; use Win32; use Win32::OLE; # DOMAIN CONTROLLER my $dc='YOUR-DC'; # USER LIST my $userList = 'c:/data/allUsers.txt'; my @userList = open(USERLIST, "<$userList"); for my $userID (@userList) { processUserID($userID); } exit; # ------------------------------------------------------------- sub processUserID { my ($userID) = @_; print "\n\nDisplaying User Info for $userID...\n"; # ADSI PATH FOR SPECIFIC USER $adspath = "LDAP://CN=$userID,OU=Staff,OU=OrgUsers,OU=DepartementXYZ,DC=YOURCOMPANY,DC=com"; # CREATE / BIND OBJECT FOR SPECIFIC USER $user = Win32::OLE->GetObject($adspath) or { die "Bind failed: $adspath\n"; return; } # GET INFO $user->GetInfo(); # READ SINGLE ATTRIBUTES my $firstname = $user->Get("givenName"); my $initials = $user->Get("initials"); my $lastname = $user->Get("sn"); my $displayname = $user->Get("displayName"); my $description = $user->Get("description"); my $office = $user->Get("physicalDeliveryOfficeName"); my $telephonenumber = $user->Get("telephoneNumber"); my $email = $user->Get("mail"); my $webpage = $user->Get("wWWHomePage"); my $homeMDB = $user->Get("homeMDB"); my $msExchHomeServerName = $user->Get("msExchHomeServerName"); my $legacyExchangeDN = $user->Get("legacyExchangeDN"); my $extensionAttribute2 = $user->Get("extensionAttribute2"); # JOIN MULTI VALUE ENTRY my $objectClass = join ", ", @{$user->Get("objectClass")}; # PRINT print "First name: $firstname\n"; print "Initials: $initials\n"; print "Last name: $lastname\n"; print "Display name: $displayname\n"; print "Description: $description\n"; print "Office: $office\n"; print "Telephone number: $telephonenumber\n"; print "E-mail: $email\n"; print "Web page: $webpage\n"; print "Mail Server: $homeMDB\n"; print "Mail Server: $msExchHomeServerName\n"; print "Exchange Receipient: $legacyExchangeDN\n"; print "extensionAttribute2: $extensionAttribute2\n"; print "objectClass: $objectClass\n"; print "Current MDB: ". $user->HomeMDB(); } -----Original Message----- From: randy.m.briggin [mailto:[EMAIL PROTECTED] Sent: Donnerstag, 24. März 2005 18:01 To: [EMAIL PROTECTED] Subject: LDAP Search Question Hello Mr. Barr Thank you very much for your work and development on the net::ldap package for Perl. I am sorry to bother you but, I can't seen to get around this problem I have searched exhaustively looking for an example or text describing how to accomplish my task. Would you please point me in the correct direction to answer my question. Through your documentation I was able to complete part of my objective which is to search our active directory and get specific information about a specific user. The end result is I need to pass a list of userID's to my program and get information about them and then put that information into a text file. To debug and test my program I hard coded all the variable into my program and everything worked great however when I try to input any variable during the execution of my program it just hangs and then I get a I/O timeout error. I can seem to find any documentation on how to interject a variable into the program from either from the command line or a text file read into the program. I included my code in this email if you would look at it to see if I am using the wrong functions to accomplish what I am trying to do. Any help you will give me will be greatly appreciated thank you in advance for your help. The test code I added after I was able to get the program running is between the "#" . What I was trying to do was two things make the program usable by someone other than myself that is why I added the (2) lines asking for your ZID(loginID) and password and the 3rd line asking for ZID to search on. The original intent was to pass only ZID's from a text file to the program to get information about the users. use strict; use Net::LDAP; ################################################## system("clear"); print("Enter your ZID: "); my $sMyZid = <STDIN>; chop $sMyZid; print("Enter your northamerica PW: "); my $sPw = <STDIN>; chop $sPw; system("clear"); print("Enter ZID to search for: "); my $sZid = <STDIN>; chop $sZid; ################################################## # Connection and binding parameters my $dc = 'my domain'; my $user = 'my loginname'; my $passwd = 'my password'; my $port = '3268'; my $host = 'my hostname'; # Search parameters my $base = "dc=myCompany,dc=net"; my $scope = "subtree"; my $filter = "(&(objectclass=user)(objectcategory=user)(sAMAccountName=sZid))"; my @attrs = qw(cn mail telephoneNumber physicalDeliveryOfficeName l co); my $ldap = Net::LDAP->new($dc, hostname => $host, port => $port) or die $@; my $rc = $ldap->bind( $user, password => $passwd,); die $rc->error if $rc->code; #----------------# # Callout A #----------------# my $search = $ldap->search ( base => $base, scope => $scope, filter => $filter, attrs => [EMAIL PROTECTED] ); die $search->error if $search->code; #----------------# # Callout B #----------------# foreach my $entry ($search->entries) { $entry->dump; } $ldap->unbind; Thanks Randy Randy Briggin Information Technology 1441 W. Long Lake Rd. Troy Michigan, 48098 MC: 480-415-220 Telephone: 248-267-0963 Fax: 248-267-8840 email: [EMAIL PROTECTED] ************************************************************************ **************** Note: The information contained in this message may be privileged and confidential and thus protected from disclosure. If the reader of this message is not the intended recipient, or an employee or agent responsible for delivering this message to the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by replying to the message and deleting it from your computer. Thank you. ************************************************************************ **************** Content Security by MailMarshal