Supposons que j'ai l'ID utilisateur d'un utilisateur dans Active Directory. Je souhaite obtenir une liste de tous les groupes AD dont cet utilisateur est actuellement membre. Comment puis-je le faire à 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.
Vous pouvez le faire assez facilement dans PowerShell. Je suis sûr que vous pouvez aussi le faire 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
Ou avec la commande Net User ...
Net User /domain username
Une seule ligne, aucun module nécessaire, utilise l'utilisateur actuellement connecté $ ($ env: nom d'utilisateur), 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
Trouvé une bonne ressource:
Voici comment procéder à partir de l'invite de commande Windows:
dsquery user -samid jxd123 | dsget user -memberof | dsget group -samid
PowerShell:
Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name
Si vous avez besoin de voir vos propres groupes, il y a whoami /groups
:
Affiche les groupes d'utilisateurs auxquels appartient l'utilisateur actuel.
L'avantage de cette commande sur Net User /domain username
signifie que les appartenances aux groupes implicites sont également affichées avec whoami
.
Autre approche: un script PowerShell qui répertorie toutes les appartenances aux groupes implicites à 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])
}
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt
adfind est un autre excellent outil pour ce genre de chose. C'est un outil gratuit du MVP Joe Richards
http://www.joeware.net/freetools/tools/adfind/
Vous pouvez utiliser l'un des raccourcis
adfind -sc u:username memberof
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name
Cette version PowerShell renvoie uniquement les noms de groupe AD, plutôt que le DN du groupe. La sortie "select-object" peut facilement être dirigée vers un fichier CSV ou de test.
(Get-ADUser ExampleUser –Properties MemberOf).memberof | Get-ADGroup | Select-Object name
Powershell, donne une sortie agréable et propre.
(get-aduser USER -Properties MemberOf | select MemberOf).MemberOf | % {$_.split(",")[0].replace("CN=","")}
Voici une solution recherchant tous les domaines sous le domaine donné (en supposant une autorisation appropriée pour 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