2

我想使用 LINQ to LDAP 访问 ActiveDirectory,并且我想获取其中的所有用户列表,我该
怎么做?

4

2 回答 2

8

您可以尝试以下方法。

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

有关更多信息,请检查使用 C# 和 Linq To Active Directory 获取所有用户

LINQ 到 LDAP

对于.NET Core 或 Standard,请参阅下面的 Chris D 的回答

为了获得有关此主题的全面知识,请通过 C# 检查(几乎)Active Directory 中的所有内容

我希望这对你有帮助。

于 2013-01-13T17:13:18.293 回答
0

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

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

它有两个用于 Active Directory 的包装库:

  • Linq2Ldap.Protocols ( NuGet , GitHub ) - 围绕 Linq2Ldap.Core + System.DirectoryServices.Protocols 的薄包装。
  • Linq2Ldap ( NuGet , GitHub ) - System.DirectoryServices 的瘦包装器。

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

于 2018-12-11T21:29:41.883 回答