【问题标题】:Check if a DirectoryEntry is the last of a Group in Active Directory C#检查 DirectoryEntry 是否是 Active Directory C# 中组的最后一个
【发布时间】:2016-02-20 05:14:49
【问题描述】:

您好,我需要检查 DirectoryEntry 是否是 AD 中 Group 的最后一个。我不知道为什么,但我的老板说他想要一个 Messagebox。下面的方法只是我大项目的一小部分。它能做什么?我在 AD 中获取一个组的所有用户。每个用户都保存在DirectoryEntry 中。然后我打电话给其他一些东西。这与此问题无关,请参阅“Do Stuff if de”。

我不知道如何获取最后一个元素,这就是我放这个的原因:

var lastelement = users.LastElement;

在方法中。

    private void Abgleich()
    {
        log.Debug("Abgleich in ActivDirectory aufgerufen");
        using (var context = new PrincipalContext(ContextType.Domain, Properties.Settings.Default.Servername, Properties.Settings.Default.Container))
        {
            using (var group = GroupPrincipal.FindByIdentity(context, Properties.Settings.Default.ECADGruppe))
            {
                if (group == null)
                {
                    log.Error("Group does not exist");
                }
                else
                {
                    var users = group.GetMembers(true);

                    //Pseudo Code
                    var lastelement = users.LastElement;
                    //End Pseudo Code

                    foreach (UserPrincipal user in users)
                    {
                        DirectoryEntry de = (user.GetUnderlyingObject() as DirectoryEntry);
                        // Do Stuff if de
                        if (de == lastelement)
                        {
                            XtraMessageBox.Show("This is the last", "Remember", MessageBoxButtons.YesNo, MessageBoxIcon.Info);
                        }
                    }
                }
            }
        }
    }

【问题讨论】:

  • 嗨,弗洛里安,“lastelement”是什么意思?它是最新创建的条目吗?如果它是目录条目的特定属性,那么看看这个问题的答案:stackoverflow.com/questions/2228468/…
  • 例如在组中是在呼叫AD中的100个用户的那一刻。一个月后,AD 组中有 110 个用户。最后,我指的是第 100 个或第 110 个用户。组的最后一个用户。 foreach 的最后一个目标。
  • 这样您就可以为users 拨打last()。我将发布一个示例
  • @Koryu 用户只有 Dispose、Equals、GetEnumerator、GetHashcode、GetType 和 ToString

标签: c# foreach active-directory directoryentry groupprincipal


【解决方案1】:

有几种方法可以找到集合中的最后一个对象。

注意:如果您使用 var 而不是,Intellisense 不会显示所有方法 声明中的类名。

一种方法是将集合的最后一个对象存储在一个变量中

  PrincipalSearchResult<Principal> users = group.GetMembers(true);


  UserPrincipal lastuser = (UserPrincipal)users.Last();


  foreach (UserPrincipal user in users)
  {
    //...

    if (user == lastuser)
    {
      // Messagebox
    }
  }

其他选项是使用迭代变量

  for (int i = 0; i < users.Count(); i++)
  {       

    if (i == users.Count())
    {
      // .. last user
    }

  }

【讨论】:

  • 这对我很有帮助,但我只是将你的代码添加到我的项目中,但它从未进入 If Case
  • 嗯,可能是因为我将 Principal 用于 lastuser,而将 UserPrincipal 用于用户。我编辑了它。如果这就是问题所在,请选择要使用UserPrincipal 还是Principal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 2014-03-29
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多