Получить пользователей, являющихся членами группы

У меня есть рабочее решение, однако я почти уверен, что существует менее ресурсоемкий метод, поскольку текущее решение включает в себя выполнение запроса для получить члена группы, а затем запрос, чтобы получить информацию о каждом пользователе.

Вот код, который у меня есть:

DirectoryEntry root = new DirectoryEntry( "LDAP://server:port" );
DirectorySearcher searcher = new DirectorySearcher( root );
searcher.Filter = "(&(ObjectClass=Group)(CN=foo-group))";

var members = (IEnumerable)searcher.FindOne()
              .GetDirectoryEntry()
              .Invoke( "members" );

Dictionary<string , string> results = new Dictionary<string , string>();

foreach( object member in members ) {
   DirectoryEntry de = new DirectoryEntry( member );
   results.Add( de.Properties[ "SAMAccountname" ][ 0 ].ToString(), de.Properties[ "cn" ][ 0 ].ToString() );
}

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

DirectoryEntry root = new DirectoryEntry( "LDAP://server:port" );
DirectorySearcher searcher = new DirectorySearcher( root );
searcher.PropertiesToLoad.Add( "cn" );
searcher.PropertiesToLoad.Add( "SAMAccountname" );
searcher.Filter = "(&(ObjectClass=user)(memberof=foo-group))";

foreach( var user in searcher.FindAll() ) {
    //do whatever...
}

К сожалению, это почему-то не работает.

10
задан Kiquenet 5 June 2019 в 10:20
поделиться