Результаты включают в себя другие типы объектов активного каталога, например компьютеры, просто потому, что если вы посмотрите на свои объекты с помощью инструмента, подобного ADSIEDIT.MSC (инструменты поддержки W2K3), вы увидите, что объектный класс компьютера также является пользователем.Это объясняется тем фактом, что в схеме Active-Directory класс computer
является дочерним по отношению к классу user
.Существует атрибут objectCategory
, который позволяет изменить ситуацию.
Вы можете изменить свой класс следующим образом:
[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]
public class CustomUserPrinciple : UserPrincipal
{
public CustomUserPrinciple(PrincipalContext context)
: base(context)
{
}
[DirectoryProperty("objectCategory")]
public string objectCategory
{
get
{
object[] result = this.ExtensionGet("objectCategory");
if (result != null)
{
return (string)result[0];
}
else
{
return string.Empty;
}
}
set { this.ExtensionSet("objectCategory", value); }
}
}
И управлять своим запросом так:
using (UserPrincipal userPrincipal = new UserPrincipal(context) { objectCategory="Person",Enabled = true })
using (PrincipalSearchResult<Principal> results = new PrincipalSearcher(userPrincipal).FindAll())
{
Console.WriteLine(results.Count());
}