我正在尝试从文本文件中删除组,而我的一个组太大,有80,000人。
我如何让它工作l,它输出我想要的方式。
$groups = Get-Content c:\temp\ADGroups.txt
foreach($group in $groups) {
@(Get-ADGroup $group -Properties Member| Select-Object -ExpandProperty Member).Count
Get-ADGroupMember -Identity $group |
Get-ADObject -Properties Name, DisplayName |
Select-Object -Property @{n="Username";e={$_.Name}}, DisplayName,
@{n="AD Group";e={$group}} |
Export-Csv C:\Users\Desktop\GroupsInfo.CSV -NoTypeInformation -Append
}
答案 0 :(得分:8)
Get-ADGroupMember
可以返回的对象数受ADWS(Active Directory Web服务)中的限制限制:
MaxGroupOrMemberEntries
5000
指定Active Directory模块
Get-ADGroupMember
,Get-ADPrincipalGroupMembership
和{{1}可以检索的组成员的最大数量(递归或非递归),组成员身份和授权组} cmdlet。如果您预计这些cmdlet会在您的环境中返回超过5000个结果,请将此参数设置为更高的值。
根据this thread,您应该可以通过查询组对象并扩展其Get-ADAccountAuthorizationGroup
属性(如果您无法增加服务限制)来解决此问题:
member
但是,请注意,这可能会很慢,因为您将发送数千个请求。为所有用户构建哈希表可能更好:
Get-ADGroup $group -Properties Member |
Select-Object -Expand Member |
Get-ADUser -Property Name, DisplayName
这样你就可以通过他们的名字来查找它们:
$users = @{}
Get-ADUser -Filter '*' -Property Name, DisplayName | ForEach-Object {
$users[$_.DistinguishedName] = $_
}
答案 1 :(得分:2)
我听说这是AD Web服务的限制,它实际上为来自powershell cmdlet的请求提供服务。最大大小为5000.但您可以尝试使用dsget命令,尽管您需要获得一些创意。
$GroupDN = (Get-ADGroup -Identity $Group).DistinguishedName
将为您提供该组的DN。
像这样使用DSget
。
$members = DSget group $GroupDN -members
这将为您提供所有成员的DN列表。
将其反馈到管道或Get-ADUser
循环中的foreach
cmdlet,您就可以了。
答案 2 :(得分:0)
您需要使用-resultpagesize参数。您可以指定的最高值是2147483647。 所以:
Get-ADGroupMember -Identity $group -resultpagesize 2147483647 |
Select-Object -Property @{n="Username";e={$_.Name}}, DisplayName,
@{n="AD Group";e={$group}} |
Export-Csv C:\Users\Desktop\GroupsInfo.CSV -NoTypeInformation -Append
答案 3 :(得分:0)
我的Get-ADGroupMember达到了5000个限制。
您可以将Get-ADUser与-LDAPFilter参数一起使用来获取组成员。快速并且支持> 5000个条目。
$groups = @(
"group1"
"group2"
"group3"
)
Foreach ($group in $groups) {
Get-ADUser -LDAPFilter "(&(objectCategory=user)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))" | Export-Csv "C:\$group.csv"
}
您似乎可以使用此方法构建复杂的过滤器。我需要从一些非常大的团体中迅速返回启用成员。我为此使用的过滤器是:
"(&(objectCategory=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))"