Obtenir la liste des groupes AD dont un utilisateur est membre

52

Supposons que j'ai l'identifiant d'un utilisateur dans Active Directory. Je voudrais obtenir une liste de tous les groupes AD dans lesquels cet utilisateur est actuellement membre. Comment puis-je faire cela à partir de la ligne de commande Windows?

J'ai essayé ce qui suit:

dsget user "DC=jxd123" -memberof

Erreur:

dsquery failed:'-memberof' is an unknown parameter.
type dsquery /? for help.
MacGyver
la source
3
Vous ne recevrez certainement pas d'erreur pour dsquery lorsque vous exécuterez dsget. Copier et coller échouer?
Mfinni
FYI, a trouvé la même question sur StackOverflow avec quelques réponses supplémentaires.
Nic
Je n'ai pas assez de réputation pour répondre, mais en supposant que vous utilisiez powershell, vous pouvez écrire ceci: Get-ADPrincipalGroupMembership nom d'utilisateur | Choisissez un nom
Avi Parshan

Réponses:

33

Vous pouvez le faire dans PowerShell assez facilement. Je suis sûr que vous pouvez le faire aussi avec les outils ds, mais ils sont vieux et croustillants et PowerShell devrait être utilisé pour tout ce qui est possible de nos jours.

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

Version plus courte

(Get-ADUser userName –Properties MemberOf).MemberOf
MDMarra
la source
J'ai téléchargé Powershell et j'ai maintenant un fichier * .msu. Comment puis-je l'installer à l'aide du fichier * .msu?
MacGyver
Quel système d'exploitation utilisez-vous? PowerShell est intégré à tout ce qui est plus récent que XP et est disponible pour XP en tant que mise à jour Windows facultative.
MDMarra
Windows XP .. Mon entreprise est lente: - \
MacGyver
Ensuite, vous avez téléchargé le mauvais programme d'installation. De plus, le support technique de XP prend fin en un peu moins d’un an. Obtenez des mises à niveau en mouvement! microsoft.com/en-us/windows/endofsupport.aspx
MDMarra
1
Get-ADPrincipalGroupMembershipest une autre façon de faire cela dans PowerShell.
Nic
83

Ou avec la commande net user ...

net user /domain username
Jack
la source
3
J'adore la simplicité offerte par certaines "anciennes" commandes DOS. Et, ils ont toujours été là, alors même si vous n'avez pas chargé PoSH sur une vieille machine, DOS vient à la rescousse! Merci d'avoir posté ceci.
Jeff Moden
3
Cela ne fera que renvoyer des appartenances de groupe explicites, mais non implicites.
Elias Probst
11
Commande Slick, MAIS, les noms des groupes dans la sortie sont tronqués à 21 caractères ... :-(
t0r0X
1
Oui, il y a des limites. Les appartenances à un groupe imbriqué ne sont pas affichées et vous avez raison, la sortie est tronquée. Certes, je n'avais pas envisagé ce dernier.
Jack
A bien fonctionné mais pourquoi serait-il tronqué? Existe-t-il un paramètre / configuration pouvant être ajouté pour un nom de groupe complet?
ThinkCode
36

Une seule ligne, aucun module nécessaire, utilise l’utilisateur connecté actuel $ ($ env: nomutilisateur), s’exécute à partir d’autres machines Windows:

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

Qudos à cet article vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx

Canoas
la source
2
Très bonne solution, la seule qui a fonctionné pour moi sans installer de logiciel supplémentaire! Merci!
t0r0X
2
+1 pour travailler sur un système restreint sans logiciel supplémentaire!
Saustrup
8

PowerShell:

Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name
AbeNice
la source
7

Si vous avez besoin de voir vos propres groupes, il y a whoami /groups:

Affiche les groupes d'utilisateurs auxquels l'utilisateur actuel appartient.

L'avantage de cette commande net user /domain usernameest que les appartenances implicites à un groupe sont également affichées avec whoami.

Dmitry Grigoryev
la source
Meilleure solution. Upvote. Court et doux. Ne pas tronquer. Personnellement, je préfère le format LIST, c’est-à-dire whoami /groups /fo listqu’il est le plus facile à lire à l’œil.
peterh
6

Une autre approche: un script PowerShell qui répertorie toutes les appartenances implicites à un groupe à partir du jeton de compte Windows. Fonctionne sur un système restreint.

$token = [System.Security.Principal.WindowsIdentity]::GetCurrent() 
ForEach($group in $token.Groups){
    $group.Translate([System.Security.Principal.NTAccount])
}
ofthelit
la source
3
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt
Vibhat
la source
2
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name
Bill Ou
la source
2

Adfind est un autre excellent outil pour ce genre de chose. C'est un outil gratuit de MVP Joe Richards

http://www.joeware.net/freetools/tools/adfind/

Vous pouvez utiliser l'un des raccourcis

adfind -sc u:username memberof
Mike Kline
la source
1

Cette version de PowerShell ne renvoie que les noms de groupe AD, plutôt que le DN du groupe. La sortie 'select-object' peut facilement être redirigée vers un fichier CSV ou un fichier de test.

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

Nicholas Leader
la source
0

Powershell, donne une sortie agréable et propre.

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

Voici une solution recherchant tous les domaines dans le domaine donné (en supposant que l’autorisation appropriée est attribuée à chaque domaine):

# 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

Utilisation de Get-ADPrincipalGroupMembership

Thomas
la source
-2

Essaye ça:

gpresult -V /user blah
Andrew
la source