Well, I've finally found the solution by myself
use Win32::OLE;
$Win32::OLE::Warn = 3; # see perldoc Win32::OLE
my $userDn = 'cn=myself,ou=myOu,dc=myDomain,dc=myTld';
my $password = 'secret';
my @wantedFields = qw(ADsPath cn sn givenName sAMAccountName);
my $searchFilter = "(&(objectClass=user)(sn=*))";
# connect to AD with user and password
my $connObj = Win32::OLE->new('ADODB.Connection');
$connObj->{Provider} = 'ADsDSOObject';
$connObj->Properties->{'User ID' } = $userDn;
$connObj->Properties->{'Password'} = $password;
$connObj->Open('ADSI Provider');
# prepare a search
my $searchString =
join (";", "<LDAP://192.1.2.3/dc=myDomain,dc=myTld>",
$searchFilter,
join(",", @wantedFields),
'SubTree',
);
my $adoCmdObj = Win32::OLE->new('ADODB.Command');
$adoCmdObj->{ActiveConnection} = $connObj;
$adoCmdObj->{CommandText} = $searchString;
$adoCmdObj->Properties->{'Page Size'} = 1000;
# execute search and return user one by onesy
my $rsObj = Win32::OLE->new('ADODB.RecordSet');
$rsObj->Open( { Source => $adoCmdObj } );
$rsObj->MoveFirst() if $rsObj and not $rs->EOF();
while (not $rsObj->EOF) {
foreach my $i (0..$#wantedFields) {
my $value = $rsObj->Fields($i)->{Value};
# $values may be a lot of different things that often
# can't just be printed (e.g. octet string, multivalues)
# Win32::OLE::Variant objects, ...
# if you work with them, the following line doesn't make
# much sense but has to be replaced
printf "%s: %s\n", $wantedFields[$i], $value;
} # foreach
print "--------------\n";
# move "cursor" to next obj to prevent infinite loop
$rsObj->MoveNext();
} # while
$rsObj->Close();
$connObj->Close();
Best regards,
perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"
|