c# - 获取 AD 组成员数

标签 c# .net active-directory

我正在寻找与 PowerShell 快速检索 AD 组成员计数的能力等效的 native C#:

$users = Get-ADGroupMember -Identity 'Group Name'
$users.count

我找到的每个 C# 引用资料都涉及遍历组成员并将它们添加到辅助列表,然后您可以访问该列表的“计数”属性。我想在出于我的目的对其采取行动之前知道群组成员的数量,所以这并不理想。我还试图避免在 C# 中运行“Get-ADGroupMember”PowerShell cmdlet,这样我就不必等待 PowerShell 实例启动。

最佳答案

无论您是在 C# 还是 PowerShell 中执行此操作,都必须枚举成员以获得计数。计数未存储。

但是,Get-ADGroupMember 速度很慢,因为它为每个成员创建了一个新的 ADPrincipal 对象,而该对象又会查找该对象的属性 - 这是对每个成员的另一个网络请求。如果您想要的只是计数,则不需要它。

组的member 属性只是一个字符串列表:每个成员的distinguishedName。您所需要做的就是数一数,而无需实际查找这些帐户。

您可以使用 Get-ADGroup 来做到这一点,只需请求 member 属性。然后得到计数。

(Get-ADGroup "Group Name" -Properties member).member.Count

现在,如果您想查看嵌套组,事情会变得更加复杂:如果该组的成员是另一个组,您要查看内部吗?如果是这样,那会减慢速度。

如果您确实想走 C# 之路,我写了一篇关于如何查找组的所有成员的文章,具体取决于您的 AD 环境的设置方式和您正在查看的组的性质:Find all the members of a group .但是,在许多情况下,我确实会查找成员(member)帐户以获取详细信息。所以你可能需要修改它。但如果您需要,我很乐意提供帮助。

关于c# - 获取 AD 组成员数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835267/

相关文章:

c# - Datatable.Dispose() 会让它从内存中删除吗?

java - C#、Java SQLite 无法读取/写入

c# - InternalsVisibleTo 使用 "Company"属性而不是 "Assembly Name"?

c# - DataBinding 相对于手动查询/添加到控件的优势

c# - IList<Type> 到 IList<BaseType>

.net - Unity Application Block 项目进展如何?

active-directory - 尝试使用 userPrincipalName 连接时出现 LDAPException

c# - 如何在asp.net中使用C#获取IP地址

AD 组的基于 SVN 路径的授权

active-directory - 如何判断一个组是否是安全组?