Tag: active directory

使用PrincipalSearcher查找具有“或”参数的用户

是否可以使用System.DirectoryServices.AccountManagement.PrincipalSearcher使用“或”(不是“和”)基于多个参数进行搜索。 即 // This uses an and //(&(objectCategory=person)(!UserAccountControl:1.2.840.113556.1.4.803:=2)(&(SAMAccountName=tom*)(DisplayName=tom*))) var searchPrinciple = new UserPrincipal(context); searchPrinciple.DisplayName = “tom*”; searchPrinciple.SamAccountName = “tom*”; var searcher = new PrincipalSearcher(); searcher.QueryFilter = searchPrinciple; var results = searcher.FindAll(); 我希望使用PrincipalSearcher (而不是DirectorySearcher )进行类似的搜索(在LDAP中) // (&(objectCategory=person)(!UserAccountControl:1.2.840.113556.1.4.803:=2)(|(SAMAccountName=tom*)(DisplayName=tom*)))

DirectorySearcherfilter

当我运行此查询时 // Next row is used to login to AD DirectoryEntry entry = GetEntry(domain, adminUser, adminPassword); // Here starts the query DirectorySearcher search = new DirectorySearcher(entry) { SearchScope = SearchScope.Subtree, Filter = “(&” + “(objectClass=user)” + // “(distinguishedname=*OU=Ingegneria*)” + “(givenname=s*)” + “(samaccountname=*100)” + “)” }; search.PropertiesToLoad.Add(“distinguishedname”); SearchResultCollection result = search.FindAll(); 我得到六个条目,这是正确的。 所有记录,如果我使用record.GetDirectoryEntry()都有 distinguishedname: CN=xxx,OU=Utenti,OU=Ingegneria,DC=xxx,DC=xxx 无论如何,如果我删除filter的distinguishedname部分的评论,我得到零条目! […]

通过电子邮件地址在ActiveDirectory中查找用户

如何通过电子邮件地址查询ActiveDirectory用户? 给定用户可以有多个电子邮件,例如john.smite@acme.com和jsmith@acme.com。 对于给定的电子邮件,我该如何取回A / D用户? 我正在用C#编程。

UserPrincipals.GetAuthorizationGroups枚举组时发生错误(1301)。 升级到Server 2012域控制器后

研究: 与解决方法类似的问题,但不是现有问题的实际解决方案 类似的问题指向Microsoft End Point更新为罪魁祸首 上面的链接最适合我的问题,我也查看了Stack Overflow在创建这篇文章时列出的每个类似问题,只有上面引用的问题符合我的问题。 背景: 我一直在使用UserPrincipal.GetAuthorizationGroups获取在C#.NET 4.0 Web表单站点上的Server 2008 R2上运行IIS 7.5的特定页面访问权限2年半。 2013年5月15日,我们删除了运行Server 2008(而不是r2)的主域控制器,并将其替换为Server 2012域控制器。 第二天,我们开始收到下面列出的例外情况。 我使用Principal Context进行表单身份validation。 用户名/通过握手成功并且正确设置了auth cookie,但是后续的Principal Context调用也会调用UserPrincipal.GetAuthorizationGroups间歇性地失败。 我们已经解决了Server 2012域控制器中出现的一些BPA问题,但这还没有解决问题。 我还建立了一个在两个独立服务器上运行的cron。 虽然它们运行相同的代码库,但两个服务器将在不同的时间以组SID解析失败。 (开发环境和生产环境)。 该问题在Web服务器重启时暂时解决,并且在开发服务器上它将在12小时不能运行后自行解决。 生产服务器通常会停止正常运行,直到重新启动而不解决自身。 此时,我正在尝试优化针对网络中特定域控制器的cron以及新DC,并使用当前未能产生更多目标exception时间的标准LDAP查询。 到目前为止,我们已经在一个Web服务器上发现它失败的日子没有模式,但它将在大约12小时内恢复。 最新的结果显示,在上午8点到晚上8点之间,集团SID解决方案失败,然后恢复,几天后它将在晚上8点失败并在早上8点恢复,然后再运行12小时并再次失败。 我们希望看到它只是一个特定的服务器通信问题,还是看它是否是整个域控制器集。 例外: Exception information: Exception type: PrincipalOperationException Exception message: An error (1301) occurred while enumerating the groups. The group’s SID could not […]

如何获取来宾/管理员的本地组名?

题: 我使用http://support.microsoft.com/kb/306273上的代码 添加Windows用户。 问题是我需要将用户添加到组中,但组名已本地化。 例如,MS-example使用英文计算机,这意味着您可以像这样获取访客组:grp = AD.Children.Find(“Guests”,“group”) 但是在非英语计算机上,“访客”组名是本地化的,例如在我的德语操作系统上,来宾的组名是“Gäste”。 这意味着支持示例在我的计算机上运行我需要将该行更改为grp = AD.Children.Find(“Gäste”,“group”) 然后它工作。 现在,如果操作系统是任何其他语言,我如何找到访客用户的名称? 或者如何从sid获取来宾用户名? 注意:.NET 2.0,而不是3.0或3.5

使用DirectoryServices.AccountManagement从OU获取组

我想使用AccountManagement列出组织单位中的所有组。 以下代码段与DirectoryServices一起使用,但我必须在结果中使用DirectoryEntry路径实现GroupPrincipal(这感觉就像一个脏修复)。 DirectoryEntry root = new DirectoryEntry(“LDAP://OU=Marketing,OU=Operations,OU=Applications,DC=mycompany,DC=local”) DirectorySearcher ds = new DirectorySearcher(root); ds.Filter = “(objectCategory=group)”; SearchResultCollection results = ds.FindAll(); 有人有想法吗? 谢谢!

如何在ActiveDirectory和.NET 3.5中确定用户所属的所有组(包括嵌套组)

我有一个使用ActiveDirecotry授权的应用程序,并且已经决定它需要支持嵌套的AD组,例如: MAIN_AD_GROUP | |-> SUB_GROUP | |-> User 因此,用户不直接成为MAIN_AD_GROUP的成员。 我希望能够递归地查找用户,搜索嵌套在MAIN_AD_GROUP的组。 主要问题是我使用的是.NET 3.5,并且.NET 3.5中的System.DirectoryServices.AccountManagement存在一个错误,即UserPrincipal.IsMemberOf()方法UserPrincipal.IsMemberOf() 用于超过1500个用户的组 。 所以我不能使用UserPrincipal.IsMemberOf()而不是,我也无法切换到.NET 4。 我用以下函数解决了这个最后一个问题: private bool IsMember(Principal userPrincipal, Principal groupPrincipal) { using (var groups = userPrincipal.GetGroups()) { var isMember = groups.Any(g => g.DistinguishedName == groupPrincipal.DistinguishedName); return isMember; } } 但userPrincipal.GetGroups()仅返回用户是其直接成员的组。 如何使用嵌套组?

从Active Directory获取所有直接报告

我试图通过递归方式通过Active Directory获取用户的所有直接报告。 因此,给定一个用户,我将得到一个列表,其中列出了所有将此人作为经理或者有一个人作为经理的人,他有一个人作为经理…最终将输入用户作为经理。 我目前的尝试相当缓慢: private static Collection GetDirectReportsInternal(string userDN, out long elapsedTime) { Collection result = new Collection(); Collection reports = new Collection(); Stopwatch sw = new Stopwatch(); sw.Start(); long allSubElapsed = 0; string principalname = string.Empty; using (DirectoryEntry directoryEntry = new DirectoryEntry(string.Format(“LDAP://{0}”,userDN))) { using (DirectorySearcher ds = new DirectorySearcher(directoryEntry)) { ds.SearchScope = SearchScope.Subtree; ds.PropertiesToLoad.Clear(); […]

如何通过ldap中的域名获取用户的用户名和SID

我正在尝试获取特定域的用户信息,该域将是程序的输入。 在域名的基础上,它应该返回用户名称/或用户的NT Id和SID的列表。 我是ldap编程的新手,任何人都可以帮助我获取此列表。

如何从C#中找到活动目录中的用户?

我试图弄清楚如何从C#中搜索AD,类似于“查找用户,联系人和组”在“Active Directory用户和计算机”工具中的工作方式。 我有一个字符串,其中包含一个组名或一个用户名(通常格式为firstname middleinitial [如果他们有一个]姓氏,但并非总是如此)。 即使我对群组与用户进行单独查询,我也无法想出一种捕获大多数用户帐户的搜索方式。 查找用户,联系人和组工具几乎每次都会将它们带回来。 有人有什么建议吗? 我已经知道如何使用DirectorySearcher类,问题是我找不到我想做的查询。 cn和samaccount名称都没有与用户的名字有关,所以我无法搜索那些。 拆分和搜索sn和givenName并没有像工具那样接近任何地方。