C# 如何使用LINQ to LDAP获取active directory中的用户列表?

C# 如何使用LINQ to LDAP获取active directory中的用户列表?,c#,winforms,linq,active-directory,C#,Winforms,Linq,Active Directory,我想使用LINQ to LDAP访问ActiveDirectory,并想获得该目录中所有用户的列表 我该怎么做呢?你可以试试下面的方法 using ActiveDs; using BdsSoft.DirectoryServices.Linq; using System.Linq.Expressions; using System.DirectoryServices; [DirectorySchema( "user", typeof( IADsUser ) )] class User {

我想使用LINQ to LDAP访问ActiveDirectory,并想获得该目录中所有用户的列表

我该怎么做呢?

你可以试试下面的方法

using ActiveDs;
using BdsSoft.DirectoryServices.Linq;
using System.Linq.Expressions;
using System.DirectoryServices;

[DirectorySchema( "user", typeof( IADsUser ) )]
class User
{
    public string Name { get; set; }

    public string sAMAccountName { get; set; }

    public string objectCategory { get; set; }

    public string mail { get; set; }

    public string Description { get; set; }

    [DirectoryAttribute( "PasswordLastChanged", DirectoryAttributeType.ActiveDs )]
    public DateTime PasswordLastSet { get; set; }

    [DirectoryAttribute("distinguishedName")]
    public string Dn { get; set; }

    [DirectoryAttribute("memberOf")]
    public string[] Groups { get; set; }

}
使用此代码从控制台应用程序访问广告,将广告服务器置于以下代码中:

static void Main( string[] args )
{

    IEnumerable<User> users = GetADUsers();

    Console.WriteLine( "Users: " + users.Count().ToString() );

}

static DirectoryEntry ROOT = new DirectoryEntry( "LDAP://MyADDomainLocation.com" );

private static IEnumerable<User> GetADUsers()
{
    IEnumerable<User> users;

    var usersDS = new DirectorySource<User>( ROOT, SearchScope.Subtree );

            users = from usr in usersDS
                    where usr.Name == "A*" // FIlter A then any character(s)
                    select usr;

     users = users.OrderBy( user => user.Name ).ToList(); // Sort them alphabetically by name.

    return users;
}
static void Main(字符串[]args)
{
IEnumerable users=GetADUsers();
Console.WriteLine(“用户:+Users.Count().ToString());
}
静态目录条目根=新目录条目(“LDAP://MyADDomainLocation.com”);
私有静态IEnumerable GetADUsers()
{
i无数用户;
var usersDS=newdirectorySource(根,SearchScope.Subtree);
users=来自usersDS中的usr
其中usr.Name==“A*”//过滤A,然后过滤任意字符
选择usr;
users=users.OrderBy(user=>user.Name).ToList();//按名称的字母顺序排序。
返回用户;
}
有关更多信息,请查看

有关.NET核心或标准版的信息,请参见下面的

要获得有关此主题的全面知识,请检查


我希望这能对你有所帮助。

很抱歉回答这么一个老问题,但我觉得它需要更新的答案。我为此编写了一个.NET标准库:

  • Core(,)独立于平台的核心库,它可以将表达式转换为LDAP筛选器,并再次解析它们
它有两个用于Active Directory的包装器库:

  • Linq2Ldap.Protocols(,)-围绕Linq2Ldap.Core+System.DirectoryServices.Protocols的精简包装器
  • Linq2Ldap(,)-System.DirectoryServices的精简包装

它的核心可以在
Expression
s和LDAP过滤器之间传输。表达式引用的模型(
T
)必须实现一个接口,
IEntry
,该接口基本上定义了一个奇特的索引器类,您可以这样使用:
m=>m[“cn”]==“someuser”
。您还可以创建特殊属性来别名目录属性。有关更多信息,请查看project wiki。

非常感谢我的朋友,这很好,我还有一个问题:您的代码在带有AD的服务器上运行,我可以在另一台计算机(加入域的计算机)上运行此应用程序在这种情况下,LDAP地址是什么?@Sirwanafi很高兴听到它有帮助。关于你的问题,你可以参考这篇文章@Sampath你会推荐使用LINQ到LDAP吗?@user2609980是的。如果你能读到这篇文章,你也会意识到这一点。@Sampath你能帮我回答我的问题吗?我不明白也找不到如何定义
目录模式
。我的帖子中包含了与此主题相关的非常有用的链接。请检查一下。