问题标签 [directorysearcher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1755 浏览

c# - Active Directory - 获取密码即将到期的用户列表

我需要从 Active Directory 中获取密码即将到期(比如 5 天)的用户列表。

我需要通过添加一个过滤器来做到这一点,DirectorySearcher因为它会最快。我已将samaccountname模式添加到过滤器中,但我不知道如何添加pwdLastSet。理想情况下,过滤器会将用户列表减少到仅满足密码过期条件的用户。

这里 XYZ 是我用户的samaccountname.

如果我运行此代码,我可以获得displayName和其他一些属性,但不能获得pwdLastSet或计算属性msDS-UserPasswordExpiryTimeComputed,而我可以在 Active Directory 浏览器中看到它们。

0 投票
0 回答
231 浏览

performance - DirectorySearcher 和 PageSize 用于高效查询整个森林

首先,我没有安装 Active Directory PowerShell 模块,因此我无法使用这些Get-AD*模块。因此,我正在使用System.DirectoryServices.DirectorySearcher.

我需要为每个以字符串开头的 AD 组查询整个森林。我只需要组名和 DN,所以我将查询GC://DC=company,DC=com

我的查询很大。它将返回超过 100 万条记录。所以我要使用System.DirectoryServices.DirectorySearcher.PageSize.

我的理解是,System.DirectoryServices.DirectorySearcher.FindAll()将获取第一个X项目X的值,PageSize然后X在代码遍历返回的项目时自动获取下一个项目。

我的想法是在每个项目Start-Sleep -s 30之后都有一个循环。X有没有更有效的方法来运行这种查询?例如,有没有办法FindAll让每次通话之间睡眠这么多秒以获取更多数据?

我只是想找到在不破坏我公司网络的情况下进行如此大查询的最佳方法。

如果这很重要,这就是我要查询的内容:

0 投票
1 回答
624 浏览

c# - PrincipalSearcher 不遵循底层 DirectorySearcher 的过滤器

我一直在编写一些代码来使用 C# 和System.DirectoryServices.AccountManagement命名空间搜索 Active Directory。

我遇到的问题是PrincipalSearcher无法进行 OR 查询,所以如果我想通过电子邮件地址搜索用户 OR SamAccountName,这是不可能的。

为了解决这个问题,它似乎在后台PrincipalSearcher使用,因此您可以访问并设置它(使用),但由于某种原因,它不会遵循我指定的过滤器。DirectorySearcherDirectorySearcherGetUnderlyingSearcherDirectorySearcher

以上基于SizeLimit(10) 返回正确数量的结果,并按 正确排序PropertyName,但它根本不会使用该Filter选项。

有什么方法可以设置PrincipalSearcher使用 OR 过滤器(无需查询所有用户和过滤客户端)或让它正确使用该Filter选项?

我有一种工作方法DirectoryEntryDirectorySearcher但正在寻找 aUserPrincipal提供的简单性和方法。

0 投票
1 回答
849 浏览

c# - 来自 LDAP 请求的 SearchResultCollection 的性能问题

我在创建的一个小Active Directory搜索工具中遇到了一些性能问题。

这个问题与这个问题非常相似,基本上我正在通过以下代码从 AD 检索用户列表:

无论结果量(服务器是具有大量资源的 2012-R2 虚拟机)或返回的属性如何,上面都会立即返回SearchResultCollection近乎即时(~4ms),当任何尝试访问时会出现问题SearchResultCollection,包括SearchResultCollection.Count.

对于所有属性的 10 个结果并且searchString为空白,大约需要 65ms,100 个结果需要 240ms,1000 个需要 1950ms。无论结果数或搜索字符串如何,搜索实际字符串似乎都会为任何数量的结果增加约 350 毫秒。与“*a”相比,搜索“a”似乎也更慢。

这通常会很好,但在速度较慢的 PC 上,这可能需要 30 多秒才能获得 50 个结果。

速度受 中的内容影响SearchResultCollection,例如,如果我添加searchdirectory.PropertiesToLoad.Add("cn")它将花费一小部分时间(1/10 或更低)。所以我假设问题源于其中的数据量SearchResultCollection以及将其缓存/移动到内存或类似的时间(编程仍然有点新)。如果我更改它正在搜索的字段,它也会产生很大的不同,但这不应该产生影响,因为时间问题是访问时而SearchResultCollection不是调用时FindAll()

 

我想知道和澄清的是为什么在访问时需要时间SearchResultCollection而不是在实际执行搜索时,据我所知,当我调用时它应该从 LDAP 检索所有结果FindAll()

如果有人可以以任何方式(通过示例或指向学习资源)帮助使此代码更有效地运行,而不会严重影响返回的属性或搜索参数,那也是很棒的。

我知道 Powershell 可以立即检索这些类型的详细信息,所以我认为必须有更好的方法来解决这个问题。

0 投票
1 回答
283 浏览

c# - DirectorySearcher 循环中的内存泄漏

我在 using 语句中使用 DirectorySearcher 来遍历大约 5000 个对象。通过故障排除,PropertiesToLoad 属性似乎导致大量内存泄漏。如果我在每个对象上设置 propertiesToLoad 属性,我的程序会立即使用 0 GB 到 2 GB 的内存。以这种方式搜索非常快,但存在内存泄漏。

如果我在开始时而不是在每个循环上设置 PropertiesToLoad,则不会发生内存泄漏,但搜索速度很慢。我尝试清除每个循环上的属性,这修复了内存泄漏,但再次导致搜索速度变慢。我希望在这里找到两全其美的东西。

注意:我的应用程序是多线程的,因此 AD 搜索同时发生在 10 个线程上。

0 投票
2 回答
183 浏览

c# - C# 使用 Directory.GetDirectories() 枚举文件 2 个文件夹

使用 EnumerateDirectories 如何仅枚举 2 个文件夹结构。示例:如果我从 C:\ 开始,如何获取 C 中的文件夹以及下一层?

Directory.GetDirectories() 到目前为止唯一提供的是 SearchOption

这是我到目前为止所拥有的:

0 投票
1 回答
2721 浏览

c# - DirectorySearcher:如何仅获取“真实”用户的条目

我使用 aDirectorySearcher从 Active Directory 中获取所有用户 - 但我只需要获取“真实”用户。

筛选:

但我得到了所有用户帐户,例如:

问题:如何修改我的过滤器以仅返回真实用户?

我的整个代码:

0 投票
1 回答
950 浏览

c# - 如何从 LDAP 获取组织单位下所有对象的列表?

如何获取位于 LDAP 组织单元内的每个用户和/或组的列表?

我正在尝试LDAP使用c#. 我想获得所有分发列表的列表。我的所有分发列表都归入一个称为“常规分发”的组织单元 (OU)。如何获取“General Distributions”OU 下所有成员的列表?

下面是我用来查询LDAP不返回结果的服务的代码。

0 投票
1 回答
439 浏览

c# - 使用 C# 读取 ActiveDirectorySchema

我正在尝试使用 读取 Active Directory 架构数据DirectorySearcher,如下所示:

有谁知道为什么会发生此错误?或者您对如何使用阅读 AD 架构有什么建议DirectorySerarcher

注意:我不能使用

因为我面临着其他一些问题。

任何建议将不胜感激!

谢谢。

0 投票
1 回答
282 浏览

multithreading - 多线程 DirectoryEntry 搜索完成缓慢

我有大约 50,000 个 ID 需要在 AD 中查找,因此我使用 TPL 设置了 10 个线程来同时处理列表。浏览这些 ID 并获取所需信息需要 5 个多小时,如下所示。知道为什么吗?这是正常的还是我的代码放慢了速度?

我测试过,一个 ID 可能需要 3-4 秒到有时 70 或 80 秒来完成任何给定 ID 的迭代。

谢谢