2014-05-08 3 views
6

Sto cercando di ottenere tutti i gruppi di un utente è membro, anche quelli annidati (recusively), in PowerShell sto usando:Come ottenere TUTTI i gruppi di utenti AD (in modo ricorsivo) con PowerShell o altri strumenti?

(Get-ADUser <username> -Properties MemberOf | Select-Object MemberOf).MemberOf 

ma restituisce solo i gruppi l'utente è un "diretta "membro, come si ottiene quando si utilizza la console degli utenti di Active Directory. L'unica lista di TUTTI i gruppi è molto utile, come l'output di "gpresult -r", dove mostra TUTTI i gruppi di cui l'utente è membro.

C'è un modo per ottenerlo da qualsiasi utente di AD? (Non ha bisogno di essere esclusivamente in PowerShell, forse ce n'è un altro strumento che non so ancora)

risposta

19

È possibile utilizzare il LDAP_MATCHING_RULE_IN_CHAIN:

Get-ADGroup -LDAPFilter "(member:1.2.840.113556.1.4.1941:=CN=User,CN=USers,DC=x)" 

si può utilizzare anywahere che è possibile utilizzare un filtro LDAP.

Esempio:

$username = 'myUsername' 
$dn = (Get-ADUser $username).DistinguishedName 
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) | select -expand Name | sort Name 
+1

sono sbalordito da quanto grande che sia, e se potessi +1 più di una volta lo farei. Ho appena letto la documentazione relativa nel link che hai fornito e questa è una conoscenza veramente preziosa per chiunque abbia a che fare con PowerShell, AD e gruppi/membri. – TheMadTechnician

+0

NB: questo sembra essere limitato a una base di ricerca a dominio singolo. cioè se l'utente è membro di un gruppo in un dominio diverso, o uno dei gruppi è esso stesso un membro di un gruppo in un altro dominio, quelli dell'altro dominio non verranno visualizzati/saranno esclusi dall'albero (es. anche se i gruppi sull'altro dominio sono membri di gruppi nel dominio originale). – JohnLBevan

+0

@Joseph Alcorn, qualche idea sul perché non mi mostra il gruppo "Domain Users"? Quando utilizzo 'Get-ADPrincipalGroupMembership myUser' mi mostra i gruppi dell'utente (tra loro anche" Domain Users "). Quando eseguo una ricerca con: '$ dn = (Get-ADUser" myUser "). DistinguishedName Get-ADGroup -LDAPFilter (" (membro: 1.2.840.113556.1.4.1941: = {0}) "-f $ dn) | seleziona -expand Nome | sort Name' ignora il gruppo "Domain Users" ma mi mostra tutti gli altri gruppi (anche ricorsivo) – E235

1

In alternativa, è possibile utilizzare il constructed attributetokenGroups e una base con ambito query:

$tokenGroups = Get-ADUser -SearchScope Base -SearchBase '<account-distinguishedName>' ` 
-LDAPFilter '(objectClass=user)' -Properties tokenGroups | Select-Object ` 
-ExpandProperty tokenGroups | Select-Object -ExpandProperty Value