【问题标题】:Delphi- working with ADSI- how to retrieve all group membersDelphi-使用 ADSI-如何检索所有组成员
【发布时间】:2016-11-17 07:26:51
【问题描述】:

我正在使用 Active Directory 服务接口并尝试检索 组中的所有用户。 我有这行代码给我带来了组本身:

var
  Group:IADSGroup;
begin
  ADsGetObject('LDAP://CN=myGroup,CN=Users,DC=dltomb,DC=dltomb25,DC=com', IADSGroup, Group);
......

IADSGroup 接口有一个“IsMember”函数,该函数获取表示用户的 WideString,如果用户是该组的成员,则应返回 true。 问题是我总是从这个得到否定的答案...... (我正在检查的用户是该组的唯一用户,并且还检查了 Group.Count 以查看该组中有一个成员)。 如果真的想要关于这个问题的一些帮助,即使有人可以指出其他解决方法,例如枚举组成员(我也不能这样做)

【问题讨论】:

  • 使用Members枚举成员

标签: delphi active-directory delphi-10-seattle adsi


【解决方案1】:

好的,我找到了如何迭代组

var
  groupName: string;
  Fetched: Cardinal;
  ResultItem: OleVariant;
  members: IADsMembers;
..............
groupName:= Group.get_Name;
members:= Group.Members;
enum:= members._NewEnum as IEnumVariant;
Enum.Reset;

Enum.Next(1, ResultItem, Fetched);

while Fetched = 1 do
begin
  GroupMember := IDispatch(ResultItem) as IADS;
  //do something
  Enum.Next(1, ResultItem, Fetched);
end;

但是我现在有另一个问题,添加其他成员时我无法看到该组的所有成员。我认为这是因为由于某种原因,它发现只有用户属于该组,并且该组不是他们的主要组。我怎样才能让我正在搜索的组中的用户也成为他们的主要组?

【讨论】:

  • 请不要在“答案”中提出新问题 - 所以不支持这一点。而是打开一个新的 q。
  • 我忘记在此处添加 Enum.Next(1, ResultItem, Fetched); (我修好了)
  • 这仍然不是很好,因为您确实应该按照文档所述检查对Next 的调用的返回值。例如整个循环可以是Enum.Reset; while Enum.Next(1, ResultItem, Fetched)=S_OK do GroupMember := IDispatch(ResultItem) as IADS;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2015-07-10
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多