Получить список отделов из Active Directory отсутствуют некоторые отделы

У меня есть метод, который я использую для получения списка отделов в нашем активном каталоге. Однако некоторые (по крайней мере, один, о котором я знаю) не появляются. "EMP-Alumni Relations" - это то, над чем я сейчас работаю.

Вот код, который я использую. Если кто-то может определить какие-либо потенциальные проблемы, я был бы признателен. Я в растерянности на данный момент. Я определил несколько пользователей, которые находятся в отделе, поэтому я знаю, что это не должно быть проблемой.

ArrayList GetAdDepts (  )
    {
        DirectoryEntry myLdapConnection = SCDirectoryEntry.GetDirectoryEntry ( );
        DirectorySearcher search = new DirectorySearcher ( myLdapConnection );
        search.Filter = "(objectClass=user)";
        search.PropertiesToLoad.Add ( "department" );
        SearchResultCollection result = search.FindAll ( );
        ArrayList departments = new ArrayList ( );
        foreach ( SearchResult depart in result )
        {
            DirectoryEntry directoryEntry = depart.GetDirectoryEntry ( );

            if ( directoryEntry.Properties.Contains ( "department" ) )
            {
                string dept = ( string ) depart.Properties [ "department" ] [ 0 ];
                if ( dept.Trim ( ).StartsWith ( "EMP-" ) )
                {
                    if ( !departments.Contains ( dept ) )
                    {
                        departments.Add ( dept );
                    }
                }
            }

        }
        return departments;
    }

person Nathan Larkin    schedule 25.09.2012    source источник


Ответы (1)


Пользователей больше 1000? Если это так, вы, вероятно, достигли предела ">описано в ответе на этот вопрос.

Попробуйте установить:

search.PageSize = ... some non-zero value ...;

Также вы должны размещать свои одноразовые объекты DirectorySearcher, SearchResultCollection, DirectoryEntry с помощью оператора using, например:

using (var search = new DirectorySearcher(myLdapConnection ))
{
    search.Filter = "(objectClass=user)";          
    search.PropertiesToLoad.Add ( "department" );          
    search.PageSize = 1000; // any non-zero value will work
    using (var result = search.FindAll ( ))
    {
        ...
        foreach ( SearchResult depart in result )             
        {                 
            using (var directoryEntry = depart.GetDirectoryEntry ( ))
            {
                ...
            }
        }
    }
}
person Joe    schedule 25.09.2012
comment
Это сделало это. Большое спасибо, и я ценю советы по коду. - person Nathan Larkin; 25.09.2012