Obtener una lista de grupos de anuncios de los que un usuario es miembro


52

Supongamos que tengo la identificación de usuario de un usuario en Active Directory. Me gustaría obtener una lista de todos los grupos de AD en los que ese usuario es actualmente miembro. ¿Cómo puedo hacer esto desde la línea de comandos de Windows?

He intentado lo siguiente:

dsget user "DC=jxd123" -memberof

Error:

dsquery failed:'-memberof' is an unknown parameter.
type dsquery /? for help.

3
Ciertamente no obtendrá un error para dsquery cuando ejecute dsget. Copiar y pegar falla?
mfinni

Para su información, encontré la misma pregunta en StackOverflow con un par de respuestas más.
Nic

No tengo suficiente reputación para responder, pero suponiendo que esté usando powershell, puede escribir esto: Get-ADPrincipalGroupMembership username | seleccione nombre
Avi Parshan

Respuestas:


33

Puede hacer esto en PowerShell con bastante facilidad. Estoy seguro de que también puedes hacerlo con las herramientas ds, pero son viejas y crujientes y PowerShell debería usarse para todo lo posible hoy en día.

Import-Module ActiveDirectory
(Get-ADUser userName –Properties MemberOf | Select-Object MemberOf).MemberOf

Versión más corta

(Get-ADUser userName –Properties MemberOf).MemberOf

Descargué Powershell y ahora tengo un archivo * .msu. ¿Cómo lo instalo usando el archivo * .msu?
MacGyver

¿En qué sistema operativo estás PowerShell está integrado en algo más nuevo que XP y está disponible para XP como una actualización opcional de Windows.
MDMarra

Windows XP .. Mi compañía es lenta: - \
MacGyver

Luego descargó el instalador incorrecto. Además, solo un aviso, el soporte de XP termina en poco menos de un año. ¡Obtenga actualizaciones en movimiento! microsoft.com/en-us/windows/endofsupport.aspx
MDMarra

1
Get-ADPrincipalGroupMembershipEs otra forma de hacer esto en PowerShell.
Nic

83

O con el comando net user ...

net user /domain username

3
Me encanta la simplicidad que ofrecen algunos de los comandos "antiguos" de DOS. Y, siempre han estado allí, así que incluso si no tiene PoSH cargado en una máquina vieja, ¡DOS viene al rescate! Gracias por publicar esto.
Jeff Moden

3
Esto solo devolverá membresías explícitas, pero no implícitas.
Elias Probst

11
Comando ingenioso, PERO, los nombres de los grupos en la salida se truncan a 21 caracteres ... :-(
t0r0X

1
Sí, hay limitaciones. Las membresías de grupo anidadas no se muestran y tiene razón, la salida se trunca. Es cierto que no había considerado lo último.
Jack

Funcionó muy bien, pero ¿por qué se truncaría? ¿Hay una configuración / parámetro que se pueda agregar para el nombre completo del grupo?
ThinkCode

36

Una sola línea, no se necesitan módulos, utiliza el usuario registrado actual $ ($ env: username), se ejecuta desde otras máquinas Windows:

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf

Qudos a este artículo de vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx


2
¡Muy buena solución, la única que funcionó para mí sin instalar ningún software adicional! ¡Gracias!
t0r0X

2
¡+1 por trabajar en un sistema restringido sin ningún software adicional!
Saustrup


8

Potencia Shell:

Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name

7

Si necesita ver sus propios grupos, hay whoami /groups:

Muestra los grupos de usuarios a los que pertenece el usuario actual.

La ventaja de este comando sobre net user /domain usernamees que las membresías de grupo implícitas también se muestran con whoami.


Mejor solución. Votado. Corto y dulce. No se trunca Personalmente, me gusta más el formato LIST, es decir whoami /groups /fo list, porque es el más fácil de leer a simple vista.
Peter

6

Otro enfoque: un script de PowerShell que enumera todas las membresías de grupo implícitas del token de la cuenta de Windows. Funciona en un sistema restringido.

$token = [System.Security.Principal.WindowsIdentity]::GetCurrent() 
ForEach($group in $token.Groups){
    $group.Translate([System.Security.Principal.NTAccount])
}

3
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt

2
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name


1

Esta versión de PowerShell devuelve solo los nombres de grupo de AD, en lugar del DN del grupo. La salida 'select-object' se puede canalizar fácilmente a un archivo CSV o de prueba.

(Get-ADUser ExampleUser –Properties MemberOf).memberof | Get-ADGroup | Select-Object name


0

Powershell, da una salida agradable y limpia.

(get-aduser USER -Properties MemberOf | select MemberOf).MemberOf | % {$_.split(",")[0].replace("CN=","")}

0

Aquí hay una solución que busca todos los dominios bajo el dominio dado (suponiendo el permiso apropiado para cada dominio):

# provide the logon name here:
$user="alice"
$allGroups=@()

foreach ( $d in (Get-ADForest example.net).domains ) { Write-Output "Looking up $user in domain $d"; $allGroups += Get-ADPrincipalGroupMembership $user -ResourceContextServer $d }

$allGroups | ft name,GroupScope,distinguishedName -AutoSize

Uso de Get-ADPrincipalGroupMembership


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.