wcm*_*wcm 19 c# active-directory
我有搜索部门中所有用户的代码:
string Department = "Billing";
DirectorySearcher LdapSearcher = new DirectorySearcher();
LdapSearcher.PropertiesToLoad.Add("displayName");
LdapSearcher.PropertiesToLoad.Add("cn");
LdapSearcher.PropertiesToLoad.Add("department");
LdapSearcher.PropertiesToLoad.Add("title");
LdapSearcher.PropertiesToLoad.Add("memberOf");
LdapSearcher.Filter = string.Format("(&(objectClass=user)(department={0}))", Department);
SearchResultCollection src = LdapSearcher.FindAll();
Run Code Online (Sandbox Code Playgroud)
如果我只想要"经理只读"AD组中的每个人,那么过滤器需要看起来像什么?
我错了吗?
Dsc*_*duc 34
看看你的搜索,我有几个要点.首先,搜索使用objectClass(非索引)而不是objectCategory(索引).该查询存在巨大的性能问题.您总是希望将两者结合在一起,具体取决于您要检索的内容:
(&(objectCategory=person)(objectClass=user)) = All users (no contacts)
(&(objectCategory=person)(objectClass=contact)) = All contacts (no users)
(&(objectCategory=person)) = All users and contacts
Run Code Online (Sandbox Code Playgroud)
至于查找组中的用户,您可以枚举特定组的成员对象列表.在group对象的member属性中是每个用户的distinguishedName.
不要忘记您可能必须处理父组的嵌套组,因为没有使用LDAP查询处理此方法的默认方法.为此,您可能需要评估成员对象是否为组,然后获取该子组的成员属性.
最后,您应该养成为查询指定dns前缀的习惯.
没有DNS前缀:
LDAP://ou=ouname,dc=domain,dc=com
Run Code Online (Sandbox Code Playgroud)
使用DNS前缀(全部三个工作):
LDAP://servername/ou=ouname,dc=domain,dc=com
LDAP://servername.domain.com/ou=ouname,dc=domain,dc=com
LDAP://domain.com/ou=ouname,dc=domain,dc=com
Run Code Online (Sandbox Code Playgroud)
单个域不会给您带来太多问题,但是当您尝试在多域环境中运行搜索时,如果没有此添加,您将被咬住.希望这有助于让您更接近目标.
nzp*_*mad 11
我总是找到Howto :(几乎)通过C#在Active Directory中的一切都有助于解决大多数AD问题.
如果您已经知道该组的AD路径,则可能更容易在其上打开DirectoryEntry,然后从那里执行DirectorySearcher.
using (DirectoryEntry de = new DirectoryEntry("LDAP://somedomain/CN=FooBar"))
{
DirectorySearcher search = new DirectorySearcher(de, ("(objectClass=user)"));
}
Run Code Online (Sandbox Code Playgroud)
搜索者还有一个标志,是否要钻到子容器,我忘了手边的名字.
| 归档时间: |
|
| 查看次数: |
73266 次 |
| 最近记录: |