如何使用LINQ到LDAP获取活动目录中的用户列表

本文关键字:用户 列表 活动 LINQ 何使用 LDAP 获取 | 更新日期: 2023-09-27 17:52:16

我想使用LINQ到LDAP访问ActiveDirectory,我想获得该
中所有用户的列表我怎么能做到呢?

如何使用LINQ到LDAP获取活动目录中的用户列表

您可以尝试如下操作:

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; }
}

使用此代码从控制台应用程序访问AD,将AD服务器放置在以下代码中:

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;
}

有关更多信息,请查看

and LINQ to LDAP

。. NET Core或Standard,请参阅下面的Chris D的答案

要获得有关此主题的全面知识,请检查(几乎)通过c#在活动目录中的所有内容

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

  • Linq2Ldap。Core (NuGet, GitHub)独立于平台的核心库,可以将表达式转换为LDAP过滤器,然后再解析出来。

Active Directory有两个包装库:

  • Linq2Ldap。协议(NuGet, GitHub) - Linq2Ldap的一个薄包装。Core + System.DirectoryServices.Protocols.
  • Linq2Ldap (NuGet, GitHub) - System.DirectoryServices.

它的核心可以在Expression<Func<T, bool>>和LDAP过滤器之间转换。表达式引用的模型(T)必须实现一个接口,IEntry,它基本上定义了一个花哨的索引器类,您将像这样使用:m => m["cn"] == "someuser"。您还可以创建特殊属性来别名您的目录属性。