¿Línea de comando para enumerar usuarios en un grupo de Active Directory de Windows?

136

¿Hay una forma de línea de comando para enumerar todos los usuarios en un grupo particular de Active Directory?

Puedo ver quién está en el grupo yendo a Administrar computadora -> Usuario local / Grupos -> Grupos y haciendo doble clic en el grupo.

Solo necesito una forma de línea de comandos para recuperar los datos, para poder realizar otras tareas automatizadas.

Peter Mortensen
fuente

Respuestas:

37

tratar

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
pQd
fuente
1
Probablemente necesite hacer un poco más para resolver miembros y duplicar miembros en grupos anidados.
duffbeer703
1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandobtiene los miembros en los grupos anidados, aunque puede que no ayude con los duplicados, y le proporciona la cadena de consulta AD completa para el miembro, no solo su CN.
jonnybot 01 de
2
Comando no encontrado en Win7 SP1. Supongo que necesitas RSAT instalado?
Iszi
11
'dsget' no se reconoce como un comando interno o externo, etc.
adolf ajo
1
@adolfgarlic - stackoverflow.com/questions/8514599/…
bchilders
238

Aquí hay otra forma desde el símbolo del sistema, aunque no estoy seguro de qué tan automatizable, ya que tendría que analizar la salida:

Si el grupo es "grupo de seguridad global":

net group <your_groupname> /domain

Si busca "grupo de seguridad local de dominio":

net localgroup <your_groupname> /domain
Comunidad
fuente
23
no estoy seguro de por qué se rechazó esto ... la salida puede requerir un poco de análisis, pero tiene la ventaja de depender solo de las utilidades que forman parte de la instalación de Windows base.
G-Wiz
2
Pero, ¿hay alguna forma de evitar los nombres de grupos truncados?
escritura 02392
1
¡Esto es genial! Trabajó un placer.
WOPR
2
Tenga en cuenta que esto no es recursivo y no enumera los grupos que están en un grupo. No es muy útil si tiene grupos anidados o jerárquicos.
Mark
Esto funciona perfectamente para mí (y va muy bien de la mano net user /domain). ¡Gracias!
xan
49

Aquí hay una versión del comando ds que encontré más útil, especialmente si tiene una estructura OU compleja y no necesariamente conoce el nombre completo del grupo.

dsquery group -samid "Group_SAM_Account_Name" | dsget group -members -expand

o si conoce el CN ​​del grupo, generalmente el mismo que el ID de SAM, citado en caso de que haya espacios en el nombre:

dsquery group -name "Group Account Name" | dsget group -members -expand

Como se indicó en los comentarios, de manera predeterminada los comandos ds * (dsquery, dsget, dsadd, dsrm) solo están disponibles en un controlador de dominio. Sin embargo, puede instalar el paquete de Herramientas de administración desde las Herramientas de soporte en los medios de instalación de Windows Server o descargarlo del sitio de descargas de Microsoft.

También puede realizar estas consultas con PowerShell. PowerShell ya está disponible como una característica instalable para Server 2008, 2008 R2 y Windows 7, pero deberá descargar WinRM Framework para instalarlo en XP o Vista.

Para obtener acceso a los cmdlets específicos de AD en PowerShell, TAMBIÉN deberá realizar al menos una de las siguientes instalaciones:

Ryan Fisher
fuente
Uso la primera consulta todo el tiempo
Jim B
1
Tenga en cuenta que debe ejecutar este comando en el controlador de dominio.
skolima
99
Usted NO tiene que ejecutar este comando en un controlador de dominio. Sin embargo, DEBE haber instalado el paquete de soporte de administración .msi que se incluye en las herramientas de soporte en el CDROM de Windows 2003 Server. O descárguelo de microsoft.com/downloads/en/…
Ryan Fisher el
24

Para una solución de PowerShell que no requiere el complemento Quest AD, intente lo siguiente

Import-Module ActiveDirectory

Get-ADGroupMember "Domain Admins" -recursive | Select-Object name

Esto también enumerará los grupos anidados. Si no desea hacerlo, quite el modificador recursivo .

pk.
fuente
66
Tiene razón en que el módulo ActiveDirectory no requiere el complemento Quest ActiveRoles AD, pero sí requiere que tenga instaladas las herramientas RSAT y que su AD tenga al menos un DC con el servicio web de Active Directory (para 2008 R2) o el servicio de Active Directory Management Gateway Service (para los DC de 2003 y 2008) instalado. Vea mi respuesta anterior para más detalles y enlaces.
Ryan Fisher
16

Una forma muy fácil que funciona en servidores y clientes:

NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"

Devuelve 1 si el usuario está en el grupo YOURGROUPNAME, de lo contrario devolverá 0

Luego puede usar el valor% ERRORLEVEL% (0 si el usuario está en el grupo, 1 si no) como

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
deajan
fuente
1
El comando "grupo de red" busca solo el dominio (o árbol de dominio) donde se une la computadora. Una alternativa más moderna es: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT
7

Las respuestas aquí usan dsgety dsquerysolo funcionarán en versiones de servidor de Windows, ya que esos comandos no se envían en otras versiones de Windows (por ejemplo, Windows 7). En máquinas sin esos comandos, puede obtener la información que desea con el comando AdFind .

Aquí hay una consulta de ejemplo para obtener la membresía de grupo:

AdFind.exe -default -f name="Domain Admins" member -list
marcas
fuente
44
ADFind.exe es una herramienta de terceros que debe instalar de todos modos. Los comandos ds * se pueden instalar a través del paquete de herramientas de administración.
Ryan Fisher
4

¿Cómo enumerar grupos y usuarios locales?

Use el siguiente script de PowerShell para enumerar los grupos locales y los miembros de esos grupos.

$server="YourServerName"
$computer = [ADSI]"WinNT://$server,computer"

$computer.psbase.children | where { 

$_.psbase.schemaClassName -eq 'group' } | foreach {
    write-host $_.name
    write-host "------"
    $group =[ADSI]$_.psbase.Path
    $group.psbase.Invoke("Members") | foreach {
$_.GetType().InvokeMember("Name", 'GetProperty', 

$null, $_, $null)}
    write-host
}

Copie el texto de arriba en el bloc de notas y guárdelo como filename.ps1. Luego ejecuta el archivo. Debería mostrar los Grupos y Usuarios en cada grupo, o simplemente puede ejecutar esto desde powershell.

Sysadmin
fuente
Recibo, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:y luego pide información,Process[0]
Mike S
3

Para mostrar miembros de la UserGroup1prueba:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display
vadim
fuente
1
Tal vez quiera señalar en qué utilidad de CLI usaría esto. No creo que vaya a funcionar demasiado bien cmd, por alguna razón.
HopelessN00b
@ HopelessN00b: esto funciona en cmd
Pete
@Pete Newp! dsget failed:'Target object for this command' is missing.
HopelessN00b
@ HopelessN00b: recibo un error si UserGroup1 no existe, intente algo como "Contabilidad *"
Pete