active directory - sacar - PowerShell+AD: devuelve usuarios desde dentro de cualquier grupo en una unidad organizativa específica, más el recuento
sacar un reporte de usuarios de active directory (1)
Puedes simplificar bastante fácilmente esto:
$Users = Get-ADGroup -SearchBase ''ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org'' -Filter * `
| Get-ADGroupMember -Recursive `
| Select-Object -Unique `
| Sort-Object DistinguishedName;
$Users | Select-Object Name, DistinguishedName;
Write-Output ("Total Users = {0}" -f $Users.Count);
Si desea buscar por nombre de grupo, puede cambiar la primera línea a Get-ADGroup -Filter {(Name -eq "Group A") -or (Name -eq "Group B")}
como lo estaba Get-ADGroup -Filter {(Name -eq "Group A") -or (Name -eq "Group B")}
.
No está utilizando nada más que Nombre y Nombre distinguido en su ejemplo, por lo que no hay motivo para ejecutar Get-ADUser por segunda vez y obtener los mismos datos del servidor como lo hizo usted. No hay razón para perder el tiempo del DC.
Si necesita obtener propiedades adicionales más allá del nombre y el nombre distinguido, entonces necesita hacerlo. Puedes hacerlo así:
$Users = Get-ADGroup -SearchBase ''ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org'' -Filter * `
| Get-ADGroupMember -Recursive `
| Select-Object -Unique `
| ForEach-Object { Get-ADUser $_ -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname; } `
| Sort-Object DistinguishedName;
PowerShell "cinturón blanco" aquí, primer póster. ¡Trataré de no reducir el coeficiente intelectual colectivo de una comunidad tan útil mientras esté aquí! :) Estoy ejecutando PowerShell 3.0 con Quest instalado.
Mi organización tiene una unidad organizativa de Active Directory con varios grupos de seguridad que controlan el acceso VPN, que se crearon en los días previos a las convenciones de nombres (ugh).
Preferiría no confiar en los nombres yendo a "obtener los miembros de X e Y y Z", sino más bien decir "obtener los miembros de cualquier cosa en OU XXX" en su lugar.
Idealmente, me gustaría un recuento al final también, porque en última instancia, esto es para auditar "cuántos usuarios tienen acceso VPN" (aunque podría descomponer los resultados en un .CSV o algo si eso es demasiado complicado)
Así que tengo algunas piezas que harán PIEZAS de esto, simplemente no puedo visualizar cómo encajarlas todas juntas. Cualquier ayuda sería apreciada. Aquí están mis partes móviles:
devuelve usuarios en un grupo específico:
get-adgroupmember "group_of_coolness" -recursive | Select name
devuelve los resultados de una unidad organizativa completa con "base de búsqueda":
Get-ADUser -Filter * -SearchBase ''ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org'' -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname |
select GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname | Out-GridView
devuelve los resultados de un par de grupos específicos pero también da una cuenta (mi parche más avanzado hasta ahora ^^):
$GroupMembers=(get-ADGroup -filter {(Name -eq "XXXX") -or (Name -eq "YYYY")} |
get-adgroupmember -Recursive | select distinguishedname -Unique)
$Users=foreach ($user in $GroupMembers.distinguishedname) {
Get-ADUser $user
}
$Users | Sort-Object DistinguishedName |
select name, DistinguishedName
Write-Host
Write-Host "Total Users = " $Users.count
Ese último fragmento de código me parece el más cercano, SI pudiera reemplazar el "nombre -eq XXXX o YYYY" con "-searchbase" ou = XXX ... "
¿Qué piensas de las personas inteligentes? ¿Estoy cerca de la respuesta? De nuevo, gracias por cualquier consejo, y avíseme si estoy siendo un idiota y pasando por alto un hilo en el que esto ya está respondido (encontré algunas llamadas cerradas, pero nada en el dinero).
Estoy emocionado de ver lo que me falta aquí :)