Hallo Ich lese mit folgender Funktion die Mitglieder einer Gruppe auf. Dies funktioniert auch wunderbar, bis ich für "MyObjName" einen Gruppenname angebe, der einen Bindestrich "-" enthält. Dann ist das Ergebnis leer... An was kann das liegen?
{*------------------------------------------------------------------------------
this function lists the members of a group
@param ADsPath ldap path to active directory
@param MyObjClass specifies the object class in which you perform
the search
@param MyObjName the name of the object you search after
@param list this list is containing the search result
@return returns wether the search was a success or not
-------------------------------------------------------------------------------}
function ListMemberOf(ADsPath, MyObjClass, MyObjName: String; list: TStringList): Boolean;
var rs, conn, com : Variant;
strFilter, strAttributes, strADS : string;
arrVar: Array of variant;
SearchObj: String;
i:Integer;
strTxt,strValue:String;
begin
conn := CreateOleObject('ADODB.Connection');
com := CreateOleObject('ADODB.Command');
Result := True;
try
conn.Provider := 'ADsDSOObject';
conn.open;
com.ActiveConnection := conn;
if MyObjClass = 'user' then
SearchObj := 'sAMAccountName'
else
SearchObj := 'CN';
strFilter := '(&(objectClass='+MyObjClass+')('+SearchObj+'='+MyObjName+'))';
strAttributes := 'memberOf';
strADS := '<'+ADsPath+'>;' + strFilter + ';' + strAttributes + ';subtree';
Com.CommandText := strADS;
Com.Properties['Page Size'] := 100000;
Com.Properties['Searchscope'] := 2;
Com.Properties['Cache Results'] := False;
rs := Com.Execute;
if Not rs.EOF then
begin
try
arrVar := rs.Fields['memberOf'].Value;
except
SetLength(arrVar,1);
arrVar[0] := 'is not member of a group ...';
end;
end
else
Result := False;
Rs := NULL;
finally
com := NULL;
conn.Close;
conn := NULL;
end;
for i := 0 to Length(arrVar) - 1 do
begin
strTxt := arrVar[i];
strValue := MidStr(strTxt,Pos('=',strTxt)+1,Pos(',',strTxt)-Pos('=',strTxt)-1);
list.Add(strValue);
end;
end;
Danke schonmal.