Мой код:
var context = new PrincipalContext(
ContextType.Domain, "domain controller", "ou=foo,dc=bar,dc=com");
var userSearcher =
new PrincipalSearcher(new ActiveDirectoryUserPrincipal(context));
var results = userSearcher.FindAll();
Console.WriteLine(results.Count()); // outputs 2182
var regularUserSearcher = new PrincipalSearcher(new UserPrincipal(context));
var results2 = regularUserSearcher.FindAll();
Console.WriteLine(results2.Count()); // outputs 1579
var computerSearcher = new PrincipalSearcher(new ComputerPrincipal(context));
var results3 = computerSearcher.FindAll();
Console.WriteLine(results3.Count()); // outputs 603
[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("cn")]
public class ActiveDirectoryUserPrincipal : UserPrincipal
{
...
}
Мой пользовательский принципал возвращает пользователей компьютеров и .У кого-нибудь есть хорошее предложение о том, как это исправить?Я знаю, что могу сделать это:
DirectoryProperty("objectCategory")]
public string ObjectCategory
{
get
{
var result = this.ExtensionGet("objectCategory");
if (result == null || result.Length != 1)
return null;
else
return (string)result[0];
}
set
{
this.ExtensionSet("objectCategory", value);
}
}
и изменить поиск на
var userSearchTemplate = new ActiveDirectoryUserPrincipal(context);
userSearchTemplate.ObjectCategory = "person";
var userSearcher = new PrincipalSearcher(userSearchTemplate);
var results = userSearcher.FindAll();
, но это больше похоже на взлом, чем на решение ...