1

Здравствуйте, мне нужно проверить, является ли DirectoryEntry последней из группы в AD. Я не знаю почему, но мой босс говорит, что ему нужен Messagebox. Метод ниже - это лишь небольшая часть моего большого проекта. Что оно делает? Я получаю всех пользователей группы в AD. Каждый пользователь сохраняется в DirectoryEntry. Затем я вызываю некоторые другие вещи. Это не имеет значения для этого Вопроса, см. «Делать вещи, если де».Проверьте, является ли DirectoryEntry последней из группы в Active Directory C#

Я не знаю, как получить последний элемент вот почему я это:

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); 
         } 
        } 
       } 
      } 
     } 
    } 
+0

Привет Флориан, что вы имеете в виду " lastelement "? Это новейшая созданная запись? Если это конкретное свойство записи в каталоге, то взгляните на ответ на этот вопрос: http://stackoverflow.com/questions/2228468/how-to-retrieve-the-creation-date-of-an-ad -user-from-net – Koryu

+0

Например, в группе вызывается 100 пользователей в AD. И через месяц в группе AD есть 110 пользователей. К последнему я имею в виду 100-го или 110-го пользователя. Последний пользователь группы. Последний, на который нацеливает foreach. –

+0

, чтобы вы могли вызвать 'last()' для 'users'. Я отправлю пример – Koryu

ответ

1

Существует несколько способов найти последний объект в коллекции.

Примечание: Intellisense не будет показывать все методы, если вы используете var вместо имя класса в объявлениях.

Один из способов сохранить последний объект коллекции в переменной

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 
    } 

    } 
+0

Это помогает мне много, но я просто добавил код в свой проект, но он никогда не попадает в Case If –

+0

хм, может быть, потому, что Для пользователя я использовал Principal для lastuser и UserPrincipal. Я отредактировал его. Если это проблема, выберите, хотите ли вы использовать 'UserPrincipal' или' Principal' – Koryu

+0

Спасибо, что ваш код работает –

 Смежные вопросы

  • Нет связанных вопросов^_^