Help with LDAP Search filters: http://msdn.microsoft.com/en-us/library/aa746475(VS.85).aspx By using RootDSE instead of a hardcoded domain name, it makes the script domain name agnostic (it retrieves data for the domain you are currently connected to), and connects to that LDAP tree (unless you are trying to retrieve data for a domain other than the one you are currently connected to, and then this shortcut doesn't help.
For simplicity sake, I made the directreports into a subroutine.
As well, I removed the ADSSystemInfo call, and then changed your "Email
Address" property to "mail" as that is the LDAP property for an email
address in an Exchange environment.
HTH
Steven
________________________________
From: [email protected]
[mailto:[email protected]] On Behalf Of
A F
Sent: Wednesday, November 17, 2010 12:34 PM
To: [email protected]
Subject: Re: Perl and Net::LDAP
One last question on this topic,
How do I loop through all the users in AD instead of specifying
a user login name one at a time?
use Win32::OLE;
use strict;
use warnings;
my $userid = &Win32::LoginName;
my $sysinfo = Win32::OLE->new('ADSystemInfo') || die
("Can't get sysinfo: " .Win32::OLE->LastError()."\n");
my ($userDN,$first,$last);
if ( $ARGV[0] )
{
($first,$last) = split (/\./,$ARGV[0]);
$userDN = "cn=$last\\,
$first,cn=users,DC=internal,DC=compaq,DC=com";
}
else
{
$userDN=$sysinfo->{UserName};
}
my $adsuser = Win32::OLE->GetObject("LDAP://$userDN") ||
die ("Can't find user: ".Win32::OLE->LastError()."\n");
print "CN: $adsuser->{cn}\n";
print "Email address: $adsuser->{EmailAddress}\n";
print "Username: $adsuser->{Samaccountname}\n";
print "Manager: $adsuser->{Manager}\n";
print "Direct Reports: ";
foreach my $report ( @{$adsuser->{directReports}} )
{
print $report,"\n";
}
________________________________
From: Steven Manross <[email protected]>
To: A F <[email protected]>;
[email protected]
Sent: Mon, November 15, 2010 8:30:51 PM
Subject: RE: Perl and Net::LDAP
Win32::Exchange can create Exchange 2003 mailboxes.
..and really it's just a collection of Active Directory and CDO
scripts
to handle the Mailbox creation.
FYI
Steven
________________________________
From: [email protected]
[mailto:[email protected]] On
Behalf Of
A F
Sent: Monday, November 15, 2010 6:26 PM
To: [email protected]
Subject: Re: Perl and Net::LDAP
Thank you very much Jeremy.
If I can get a copy of your automated AD account creation,
that
will be great.
I am having 2 problems with mine
We are still on Exchange 2003, so even I was able to
automatically create user account in AD, I am having hard time
creation
mailbox.
Also I will be curious to know how you did the web based
since
I've tried that but failed because I couldn't get the service
account
with domain admins rights to work correctly on the web.
Thanks you so much
Alain
________________________________
From: Jeremy Fluhmann <[email protected]>
To: A F <[email protected]>
Cc: James Alarie <[email protected]>;
[email protected]
Sent: Sat, November 13, 2010 11:46:48 AM
Subject: Re: Perl and Net::LDAP
I haven't done much with Win32 and Active Directory stuff in
a
while, but aside from that, you might use something similar to
the
following to print out the array:
......
print "Username: $adsuser->{Samaccountname}\n";
print "Manager: $adsuser->{Manager}\n";
print "Direct Reports: ";
foreach my $report ( @{$adsuser->{directReports}} ) {
print $report,"\n";
}
In a former job, I created an automated AD account creation
program. It was web-based and used Catalyst, but if you still
need help
with your program, I'd be happy to dig up my code and share with
you.
Hope that helps,
Jeremy
--
Jeremy Fluhmann
http://twitter.com/jfluhmann
http://identi.ca/jfluhmann
Open Source Symposium - http://texasoss.org/
Texas Linux Fest - http://www.texaslinuxfest.org/
TCEA Strategic Open Source SIG - http://sos.tcea.org/
<http://jfluhmann.edublogs.org/>
On Sat, Nov 13, 2010 at 3:19 AM, A F <[email protected]>
wrote:
I am having issue on printing "Direct Reports" of a
manager. It is printing Direct Reports:
ARRAY(0x19a4ad4)
How can I print the values instead of the array
reference?
use Win32::OLE;
my $userid = &Win32::LoginName;
my $sysinfo = Win32::OLE->new('ADSystemInfo') || die
("Can't get sysinfo: " .Win32::OLE->LastError()."\n");
my $userDN;
if ( $ARGV[0] )
{
($first,$last) = split (/\./,$ARGV[0]);
$userDN = "cn=$last\\,
$first,cn=users,DC=internal,DC=compaq,DC=com";
}
else
{
$userDN=$sysinfo->{UserName};
}
my $adsuser = Win32::OLE->GetObject("LDAP://$userDN") ||
die ("Can't find user: ".Win32::OLE->LastError()."\n");
print "CN: $adsuser->{cn}\n";
print "Email address: $adsuser->{EmailAddress}\n";
print "Username: $adsuser->{Samaccountname}\n";
print "Manager: $adsuser->{Manager}\n";
print "Direct Reports: $adsuser->{directReports}\n";
------------------------------------------------------------
Also when using Net:LDAP,
This code only print only one single "Direct Reports"'s
name . Any idea why?
use Net::LDAP;
$ldap = Net::LDAP->new( 'server.company.com:389
<http://server.company.com:389/> ' ) or die "$@";
$mesg = $ldap->bind;
$user = &Win32::LoginName;
$user = $ARGV[0];
$mesg = $ldap->search( #
base =>
"CN=Users,DC=internal,DC=compaq,DC=com",
filter =>
"(&(samAccountname=$user) )"
);
$mesg->code && die $mesg->error;
my($entry);
@all = $mesg->entries;
foreach $ent (@all)
{
foreach $att (sort $ent->attributes )
{
if ( $att =~ m!\bmail\b! )
{
print "$att -----" . $ent->get_value($att) .
"---\n";;
}
if ( $att =~ m!manager! )
{
print "$att ----- " . $ent->get_value($att) .
"---\n";;
}
if ( $att =~ m!directReports! )
{
print "$att ----- " . $ent->get_value($att) .
"---\n";;
}
}
}
________________________________
From: James Alarie <[email protected]>
To: A F <[email protected]>
Sent: Fri, October 22, 2010 12:50:31 PM
Subject: Re: Perl and Net::LDAP
I don't remember having any sample code to offer anyone,
so I tried a Google search to see what I might have had. I
found
multiple sites where I asked for help, but no sample code.
The only reponses that I found that were of help to me
mentioned that I had to be running as the System Administrator.
I do
remember that doing that fixed my problem.
I'm now retired and no longer have access to my work
machine. The only files I have on my home computer are very
early test
files with minor sections of code as I was testing pieces. I
don't
expect them to be of any use, and they may contain something
considered
PRIVATE to my previous employer.
Sorry. I wish I could help, but it's been seven years,
and I don't remember much about that project. Most of my work
since
then has been HTML, XHTML, JavaScript, and CSS, plus a small
amount of
VBScript.
--- On Fri, 10/22/10, A F <[email protected]> wrote:
From: A F <[email protected]>
Subject: Re: Perl and Net::LDAP
To: "James Alarie" <[email protected]>
Date: Friday, October 22, 2010, 12:44 PM
Thank you very much.
I was googling for perl and Active directory and
your post came up from a forum and from there I went to your web
site.
________________________________
From: James Alarie <[email protected]>
To: [email protected]
Sent: Fri, October 22, 2010 8:40:06 AM
Subject: Re: Perl and Net::LDAP
I haven't worked with LDAP in over six years;
I'll have to go looking for whatever I might have saved on that.
Just
curious: where did you get my address with reference to this
stuff?
--- On Fri, 10/22/10 3:11 AM,
[email protected] wrote:
Hi James,
Can you send me your sample code to create,
modify users in Active Drectory?
I am having difficulties creating account.
Thanks
Alai
directreports.pl
Description: directreports.pl
_______________________________________________ Perl-Win32-Admin mailing list [email protected] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
