我应该使用Active Directory模块cmdlet还是DirectoryServices .NET类

问题描述:

我有一个非常简单的问题。有什么更好的使用? AD模块(即Get-ADComputer)或DirectoryServices .NET Class尝试连接到AD并从域中提取所有计算机,用户和组时。或者根本不重要?我应该使用Active Directory模块cmdlet还是DirectoryServices .NET类

我判断对使用哪种方法的关键因素是:

  1. 哪种方法的脚本将运行得更快?
  2. 哪个放置网络/ AD的负载较小
  3. 每种方法都有哪些限制?

我知道AD模块只安装在Win Server 2008 R2和更高版本上,默认情况下是在旧服务器上默认安装的,该模块默认情况下不安装。但是在当今世界,如果所有服务器的环境都不比2008 R2更早,那么这个环境确实不应该成为问题。

我想要做的就是将所有User对象(以及一些重要的字段/属性),所有Computer对象以及所有Group对象解压缩到.csv。所以基本上“搜索”AD对象并循环遍历每个结果行,然后保存到一个表以导出到.csv。

+0

我不确定这是否太宽泛。如果没有别的东西,它可能真的取决于你在做什么以及你试图返回的数据。使用activedirectory模块,简单查询会更简洁明了。 IIRC .net的几乎总是会更快,但我没有任何支持。 – Matt

+0

我所要做的就是将所有用户对象(以及一些重要的字段/属性),所有计算机对象以及所有组对象提取到.csv。所以基本上“搜索”AD对象并循环遍历每个结果行,然后保存到一个表以导出到.csv。 –

+1

您可以为它们编写示例代码并使用'Measure-Object'来测量它们的执行时间吗? – sodawillow

我在问题中添加了最后一条评论,因为它只是描述了一个很长时间在Windows服务器上存在的小工具。

Csvde.exe使用非常接近Ldifde.exe的语法,它允许您使用LDAP query syntax提取活动目录对象。据我所知,这些工具由ADSI提供支持。

你可以看看this答案。

的ActiveDirectory中的cmdlet是比使用的System.DirectoryServices更直观,但是你可能会失去一些的System.DirectoryServices提供了控制。对于大多数情况下,特别是对于新的PowerShell人员,我建议使用ActiveDirectory cmdlet

就像速度一样,@sodawillow建议,您可以测量每个的执行时间,然后使用最快的速度。我可以给你轶事,但他们不会代表每个人的经验。

+0

感谢这是一个很好的答案。你能否提供你的见解/想法/意见?你说“我可以给你轶事......”。我会对你的经验非常感兴趣,无论它是否可以普遍同意或接受。 –

+0

@ TrackABill.com - 我运行了一些简单的测试,使用这两种方法检索域上的所有用户对象。成千上万的物体。每次测试10次,使用DirectoryServices的次数大约是每次3倍。不要把它当作证据。这就是我在这种情况下的情况。建议运行你自己的测试,如果速度对你来说很重要。对我而言,除非速度至关重要,否则我仍会坚持使用AD cmdlet,以便使用和易读。 –

+0

谢谢!这有很大帮助。真的很感激它。最后一个问题......我用一个包含50k个计算机对象,30k个组和120k个用户的域来运行我的脚本。运行大约需要一个小时是否正常?谢谢! –