Mantén la atención ya que en este enunciado hallarás el arreglo que buscas.
Solución:
El número de objetos que Get-ADGroupMember
puede devolver está restringida por un límite en el ADWS (Active Directory Web Services):
MaxGroupOrMemberEntries
5000
Especifica el número máximo de miembros del grupo (recursivos o no recursivos), pertenencias a grupos y grupos de autorización que puede recuperar el módulo de Active Directory
Get-ADGroupMember
,Get-ADPrincipalGroupMembership
yGet-ADAccountAuthorizationGroup
cmdlets. Establezca este parámetro en un valor más alto si prevé que estos cmdlets devolverán más de 5000 resultados en su entorno.
De acuerdo con este hilo, debería poder solucionarlo consultando objetos de grupo y expandiendo su member
propiedad (si no puede aumentar el límite del servicio):
Get-ADGroup $group -Properties Member |
Select-Object -Expand Member |
Get-ADUser -Property Name, DisplayName
Sin embargo, tenga en cuenta que es probable que esto sea lento, ya que enviará miles de solicitudes. Podría ser mejor construir una tabla hash de todos los usuarios:
$users = @
Get-ADUser -Filter '*' -Property Name, DisplayName | ForEach-Object
$users[$_.DistinguishedName] = $_
para que puedas buscarlos por su nombre distinguido:
Get-ADGroup $group -Properties Member |
Select-Object -Expand Member |
ForEach-Object $users[$_]
Estaba llegando al límite de 5000 con Get-ADGroupMember.
Puede usar Get-ADUser con el parámetro -LDAPFilter para obtener miembros del grupo. Es rápido y admite >5000 entradas.
$groups = @(
"group1"
"group2"
"group3"
)
Foreach ($group in $groups) Export-Csv "C:$group.csv"
Parece que puedes construir filtros complejos con este método. Necesitaba devolver rápidamente miembros habilitados de algunos grupos extremadamente grandes. El filtro que usé para esto fue:
"(&(objectCategory=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))"
Escuché que esto es una limitación de los servicios web de AD que realmente atienden las solicitudes de los cmdlets de PowerShell. El tamaño máximo es 5000. Pero puede probar el comando dsget, aunque necesitará ser un poco creativo.
$GroupDN = (Get-ADGroup -Identity $Group).DistinguishedName
le dará el DN del grupo.
Utilizar el DSget
Me gusta esto.
$members = DSget group $GroupDN -members
Esto le dará la lista de DN de todos los miembros.
Alimenta eso a un Get-ADUser
cmdlet en una tubería o foreach
bucle y listo.
Si piensas que ha resultado de ayuda este artículo, sería de mucha ayuda si lo compartes con el resto juniors así contrubuyes a dar difusión a esta información.