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.
MacGyver
fuente
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
MDMarra
fuente
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
Jack
fuente
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

Canoas
fuente
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
AbeNice
fuente
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.

Dmitry Grigoryev
fuente
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])
}
ofthelit
fuente
3
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt
Vibhat
fuente
2
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name
Bill Ou
fuente
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

Nicholas Leader
fuente
0

Powershell, da una salida agradable y limpia.

(get-aduser USER -Properties MemberOf | select MemberOf).MemberOf | % {$_.split(",")[0].replace("CN=","")}
Trbo
fuente
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

Thomas
fuente
-2

Prueba esto:

gpresult -V /user blah
Andrés
fuente