【发布时间】:2019-06-05 18:20:46
【问题描述】:
我有一个可行的解决方案,但是我很确定有一个资源密集型较少的方法,因为当前的解决方案涉及执行查询以获取组成员,然后执行查询以获取每个用户的信息。
这是我的代码:
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...
}
很遗憾,由于某种原因,这不起作用。
【问题讨论】:
标签: c# .net active-directory