ich verwende fuer AD nur sehr ungern Net::LDAP, weil es da beim schreiben arge Probleme mit Sonderzeichen gibt (LDAPv2 funktioniert witzigerweise recht gut). Beim Lesen ist das allerdings kein Problem, es gibt ja
Encode...
Eine reine ADSI-Loesung ueber den globalen Katalog koennte folgendermaszen aussehen (wenn der PC in der Domain haengt):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use Win32::OLE;
$Win32::OLE::Warn = 3;
my @attrs = qw(ADsPath cn sn givenName samAccountName displayName telephoneNumber
mail physicalDeliveryOfficeName facsimileTelephoneNumber);
my $searchString = "GC://dc=myDomain,dc=de;(&(objectClass=user)(sn=Mayer));" .
join(",", @attrs) . ";SubTree";
my $conn = Win32::OLE->new("ADODB.Connection");
$conn->{Provider} = "ADsDSOObject";
$conn->Open("ADSI Provider");
if (my $error = Win32::OLE->LastError) { die "Error in connect: $error\n"; }
my $adoCmd = Win32::OLE->new('ADODB.Command');
$adoCmd->{ActiveConnection} = $conn;
$adoCmd->{CommandText} = $searchString;
$adoCmd->Properties->{'Page Size'} = 50;
my $rs = Win32::OLE->new('ADODB.RecordSet');
$rs->Open( {Source => $adoCmd} );
while (not $rs->EOF()) {
my %object = map {
$attr[$_] => $rs->Fields($_)->{Value}
} 0..$#attr;
# mach was mit %object, z.B.
foreach my $attr (sort keys %object) { print "$attr => $object{$attr}\n" }
$rs->MoveNext;
} # while
$conn->Close();
(Fehlerabfrage habe ich nur eine getippt; die anderen sehen eh fast identisch aus)