C# Active Directory:主要类-S.DS.AM vs S.DS.AD

C# Active Directory:主要类-S.DS.AM vs S.DS.AD,c#,sql-server,active-directory,ldap,C#,Sql Server,Active Directory,Ldap,我正在为Active Directory编写访问审核报告。我使用LDAP通过SSIS中的C#脚本组件将数据提取到SQL Server数据库中。这是我第一次涉足广告业,所以我坦承自己缺乏深入的了解。我试图通过询问那些在这个话题上有经验的人来消除这些障碍。如果我混淆了我的任何比喻,请原谅我 关于为所有用户检索数据,最好只使用Principal类,并通过S.DS.AM访问GroupPrincipal、UserPrincipal和ComputerPrincipal(即具体类),还是从S.DS.AD获取所

我正在为Active Directory编写访问审核报告。我使用LDAP通过SSIS中的C#脚本组件将数据提取到SQL Server数据库中。这是我第一次涉足广告业,所以我坦承自己缺乏深入的了解。我试图通过询问那些在这个话题上有经验的人来消除这些障碍。如果我混淆了我的任何比喻,请原谅我

关于为所有用户检索数据,最好只使用Principal类,并通过S.DS.AM访问GroupPrincipal、UserPrincipal和ComputerPrincipal(即具体类),还是从S.DS.AD获取所有内容更好(参见下面的参考资料)?我知道这两个都是S.DS的子类,所以在使用S.DS.AM时,可能会错过from S.DS.AD中未包含的对象。是否有任何相关数据或对象包含在S.DS.AD中,但不包含在S.DS.AM中,这将有助于访问控制审核?另外,我知道如果PageSize=1000,那么我可能需要使用S.DS.AD,然后循环使用S.DS.AM

如果最好使用S.DS.AM,是否有一种方法可以捕获任何已创建的抽象类或辅助类,这些抽象类或辅助类是从具体类中划分出来的?我是否只使用StructuralObjectClass属性值

S.DS.AD:

S.DS.AM:
System.DirectoryServices.AccountManagement
名称空间是
System.DirectoryServices
的包装器。名称空间包含涵盖程序员在使用AD时面临的最常见情况的类。这些类设计用于在中小型环境中执行有限的一组任务,并且存在性能问题

例如,
GroupPrincipal.Members
将在第一次呼叫时加载整个组成员资格,这可能不是企业环境中所需的行为,因为在企业环境中,组可能包含10-100k个主体,范围检索是最佳选择

使用
System.DirectoryServices
System.DirectoryServices.Protocols
可以管理进程在与AD通信时使用的资源(RAM、网络流量)


System.DirectoryServices.ActiveDirectory
可用于所有环境,因为这些类返回的数据量非常小(例如Active Directory架构、站点、域控制器)

System.DirectoryServices.AccountManagement
命名空间是
System.DirectoryServices
的包装器。名称空间包含涵盖程序员在使用AD时面临的最常见情况的类。这些类设计用于在中小型环境中执行有限的一组任务,并且存在性能问题

例如,
GroupPrincipal.Members
将在第一次呼叫时加载整个组成员资格,这可能不是企业环境中所需的行为,因为在企业环境中,组可能包含10-100k个主体,范围检索是最佳选择

使用
System.DirectoryServices
System.DirectoryServices.Protocols
可以管理进程在与AD通信时使用的资源(RAM、网络流量)


System.DirectoryServices.ActiveDirectory
可用于所有环境,因为这些类返回的数据量非常小(例如Active Directory架构、站点、域控制器)

IMHO,要求是选择标准的来源。有许多事情仅仅通过AccountManagement是不可能实现的,ActiveDirectory程序集在其中提供了帮助(您的问题中已经提到)。我建议您限制问题的范围,并询问您试图实现的目标。问题是没有范围要求-公司只想审核访问权限,而让我来解决。所以,它可以是非常大的范围,也可以是非常窄的范围。因为我有空间去弄清楚,所以我试图包括将来可能需要的项目,这样我就可以避免将来的开发工作,并使用已经提供的数据,同时注意潜在的性能问题。因此,我试图根据其他人的经验,看看什么是最好的实现。IMHO,需求是选择标准的来源。有许多事情仅仅通过AccountManagement是不可能实现的,ActiveDirectory程序集在其中提供了帮助(您的问题中已经提到)。我建议您限制问题的范围,并询问您试图实现的目标。问题是没有范围要求-公司只想审核访问权限,而让我来解决。所以,它可以是非常大的范围,也可以是非常窄的范围。因为我有空间去弄清楚,所以我试图包括将来可能需要的项目,这样我就可以避免将来的开发工作,并使用已经提供的数据,同时注意潜在的性能问题。因此,我试图根据其他人的经验来了解什么是最好的实现。我不认为我可以直接使用Principal类,因为其中包含的方法需要sAMAccountName或其他输入。因此,我需要使用DirectoryEntry.FindAll()方法来识别所有用户,然后我可以通过GroupPrincipal查找所有计算机/用户映射,并基于这些数据构建交集表。但是,我需要确定如何遍历用户、计算机和组这三个objectCategories。我可能需要创建一个循环来设置DirectorySearcher过滤器。谢谢。我不认为我可以直接使用Principal类,因为它包含的方法需要sAMAccountName或其他输入。因此,我需要使用DirectoryEntry.FindAll()方法来识别所有用户,然后我可以通过GroupPrincipal查找所有计算机/用户映射并生成