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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| 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; |