C# 我是否可以在不知道OU'的情况下通过某些属性获取特定用户;在Active Directory(AD)中有什么?

C# 我是否可以在不知道OU'的情况下通过某些属性获取特定用户;在Active Directory(AD)中有什么?,c#,.net,active-directory,ldap,C#,.net,Active Directory,Ldap,我需要得到一个只知道“sAMAAccountName”字段的特定用户 问题是,这个特定用户可以在许多组中: OU=ThirdParty OU=Company1 CN=User1 CN=User2 CN=User3 OU=Company2 CN=User1 CN=User2 CN=User3 有没有办法让用户不知道他们的组,只使用他们拥有的一个属性 我的代码: Dire

我需要得到一个只知道“sAMAAccountName”字段的特定用户

问题是,这个特定用户可以在许多组中:

OU=ThirdParty
    OU=Company1
        CN=User1   
        CN=User2 
        CN=User3 
    OU=Company2
        CN=User1 
        CN=User2 
        CN=User3 
有没有办法让用户不知道他们的组,只使用他们拥有的一个属性

我的代码:

DirectorySearcher search = new DirectorySearcher(_path);
search.Filter = "(&(objectCategory=person)(objectClass=User))";
StringBuilder groupNames = new StringBuilder();
try
{
    SearchResultCollection result = search.FindAll();
    .....
}
谢谢

编辑:

好的,我是用这个代码得到的:

DirectorySearcher search = new DirectorySearcher(_entry, "(sAMAccountName=" + userCode + ")");

关于用户,您需要了解哪些信息?我们过去使用过这种类型的代码来检索有关用户的信息

using (var identity = new WindowsIdentity(username))
{
    var user = new WindowsPrincipal(identity);

    if (user.IsInRole("Some Role Name"))
        return true;

    return false;
}
编辑
在你发表评论之后,我想知道这篇文章是否能为你提供更多的信息。因此,它们显示获取您请求的字段,我不确定检索员工的代码是否适用于您,因为这是指InfoPath:

如果切换到
System.DirectoryServices.AccountManagement
,那么您会发现API实际上要简单得多

例如:

    public something FindUserByUserName( string UserName )
    {
        using ( var searcher = 
            new PrincipalSearcher( new UserPrincipal( ConfigurationContext ) { Name = UserName } ) )
        {
            var item = searcher.FindOne();

            // do whatever you want with the found object and return it
        }
    }
其中,
ConfigurationContext
是一个属性,返回
PrincipalContext
(连接到AD的凭据,类似于“连接字符串”)

尝试以下操作:

public static List<string> GetADUserInfo(string login)
{
    //Using Hosting.HostingEnvironment.Impersonate()
    List<string> info = new List<string>();
    PrincipalContext infPC = new PrincipalContext(ContextType.Domain, "domain", "login", "password");
    UserPrincipal infUP = new UserPrincipal(infPC);
    PrincipalSearcher infPS = new PrincipalSearcher();
    UserPrincipal foundUP;

    infUP.SamAccountName = login;
    infPS.QueryFilter = infUP;
    foundUP = infPS.FindOne();

    if (foundUP != null) {
        info.Add(foundUP.SamAccountName.ToLower);
        info.Add(foundUP.GivenName);
        info.Add(foundUP.Surname);
        info.Add(foundUP.EmailAddress.ToLower);
        return info;
    }

    return null;
}
公共静态列表GetADUserInfo(字符串登录)
{
//使用Hosting.HostingEnvironment.Impersonate()
列表信息=新列表();
PrincipalContext infPC=新PrincipalContext(ContextType.Domain,“域”、“登录”、“密码”);
UserPrincipal infUP=新的UserPrincipal(infPC);
PrincipalSearcher infPS=新PrincipalSearcher();
他被抛弃了;
infUP.SamAccountName=登录名;
infPS.QueryFilter=infUP;
foundUP=infPS.FindOne();
if(foundUP!=null){
info.Add(foundUP.SamAccountName.ToLower);
info.Add(foundUP.GivenName);
信息添加(foundUP.姓氏);
info.Add(foundUP.EmailAddress.ToLower);
退货信息;
}
返回null;
}

我需要知道“physicalDeliveryOfficeName”字段,不知道这是否相关。我会试试你的密码!谢谢添加了一个指向有关infopath的msdn文章的链接,在该文章中,他们似乎正在获取
physicalDeliveryOfficeName
,您也可以查看一下。谢谢!这个链接有答案!在Anthony Shaw link中,有一个例子,完全符合我的要求!谢谢