【发布时间】:2013-01-13 05:28:37
【问题描述】:
我想使用 LINQ to LDAP 访问 ActiveDirectory,并且我想获取其中所有用户的列表
我该怎么做?
【问题讨论】:
-
我在我的帖子中包含了与此主题相关的非常有用的链接。请检查一下。
标签: c# winforms linq active-directory
我想使用 LINQ to LDAP 访问 ActiveDirectory,并且我想获取其中所有用户的列表
我该怎么做?
【问题讨论】:
标签: c# winforms linq active-directory
你可以试试下面的方法。
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;
}
更多信息请查看Get All Users using C# with Linq To Active Directory
对于 .NET Core 或 Standard,请参阅下面的 Chris D's answer。
要全面了解该主题,请查看(Almost) Everything In Active Directory via C#
希望对你有帮助。
【讨论】:
DirectorySchema。
很抱歉回答这么老的问题,但我觉得它需要一个更新的答案。我为此编写了一个 .NET Standard 库:
它有两个用于 Active Directory 的包装库:
它的核心可以在 Expression<Func<T, bool>>s 和 LDAP 过滤器之间转换。表达式引用的模型 (T) 必须实现一个接口 IEntry,它基本上定义了一个花哨的索引器类,您可以像这样使用它:m => m["cn"] == "someuser"。您也可以创建特殊属性来为您的目录属性设置别名。请参阅项目 wiki 了解更多信息。
【讨论】: