我想找到一种使用Powershell识别大型AD组(例如,超过5000个用户)的更有效方法。不需要列出成员,因为我想从其他过程中排除这些组。
很显然,我可以按以下方式使用Get-ADGroup
,但是如果有更有效的方法(例如,使用LDAP过滤器等),那将会很有帮助。
(Get-ADGroup "Group" -Properties members).members.count | where {$_ -lt 5000}
出于实际目的,我正在查询成千上万个组的成员,并且我想在初始运行中排除较大的组(因为主要过程在大型组上占用大量内存)。
答案 0 :(得分:0)
我没有确切的答案。但是,无论如何,您都要求DC告诉您每个成员的姓名。这将花费很多时间。 get-adgroup的括号要求查询每个成员并将其保存在本地ram中。然后,您告诉它获取成员的方法。因此,它重新列出了它。然后得到计数。
也许您这样做了。它会并行运行,而不是重复两次。因此,这可以节省20-30%的时间。
Get-ADGroup "Group" -Properties members | select -ExpandProperty members | measure | where count -lt 5000
这是一个自动执行此操作的示例脚本...(我更改了ldap过滤器)
Get-ADGroup -filter * | select -expand name | foreach {
$group = $_
if (Get-ADGroup {name -eq $group} -Properties members | select -ExpandProperty members | measure | where count -lt 5000){
$countedGroups += $group
}
$countedGroups
}