Obter lista de grupos do AD dos quais um usuário é membro

52

Suponha que eu tenha a identificação de usuário de um usuário no Active Directory. Eu gostaria de obter uma lista de todos os grupos do AD nos quais esse usuário atualmente é membro. Como posso fazer isso na linha de comando do Windows?

Eu tentei o seguinte:

dsget user "DC=jxd123" -memberof

Erro:

dsquery failed:'-memberof' is an unknown parameter.
type dsquery /? for help.
MacGyver
fonte
3
Você certamente não receberá um erro para dsquery ao executar o dsget. Falha ao copiar e colar?
mfinni
Para sua informação, encontrei a mesma pergunta no StackOverflow com mais algumas respostas.
20413 Nic
Não tenho reputação suficiente para responder, mas, supondo que você esteja usando o PowerShell, você pode escrever o seguinte: Get-ADPrincipalGroupMembership username | selecione o nome
Avi Parshan 10/09

Respostas:

33

Você pode fazer isso no PowerShell com bastante facilidade. Tenho certeza de que você também pode fazê-lo com as ferramentas ds, mas elas são antigas e complicadas e o PowerShell deve ser usado para tudo o que é possível atualmente.

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

Versão mais curta

(Get-ADUser userName –Properties MemberOf).MemberOf
MDMarra
fonte
Eu baixei o Powershell e agora tenho um arquivo * .msu. Como instalo usando o arquivo * .msu?
21713 MacGyver
Em qual sistema operacional você está? O PowerShell está embutido em algo mais novo que o XP e está disponível para o XP como um Windows Update opcional.
precisa saber é o seguinte
Windows XP .. Minha empresa é lenta: - \
MacGyver
Então você baixou o instalador errado. Além disso, apenas um alerta, o suporte ao XP termina em menos de um ano. Receba atualizações em movimento! microsoft.com/en-us/windows/endofsupport.aspx
MDMarra
11
Get-ADPrincipalGroupMembershipé outra maneira de fazer isso no PowerShell.
20413 Nic
83

Ou com o comando net user ...

net user /domain username
Jack
fonte
3
Eu amo a simplicidade que alguns dos comandos "antigos" do DOS oferecem. E eles sempre estiveram lá; mesmo que você não tenha o PoSH carregado em uma máquina antiga, o DOS vem em socorro! Obrigado por postar isso.
Jeff Moden
3
Isso retornará apenas associações de grupo explícitas, mas não implícitas.
Elias Probst
11
Comando Slick, MAS, os nomes de grupos na saída são truncados para 21 caracteres ... :-(
t0r0X
11
Sim, existem limitações. As associações de grupos aninhados não são mostradas e você está certo, a saída é truncada. É certo que eu não havia considerado o último.
Jack
Funcionou muito bem, mas por que seria truncado? Existe uma configuração / parâmetro que pode ser adicionado para o nome completo do grupo?
ThinkCode 17/08/16
36

A linha única, sem necessidade de módulos, usa o usuário registrado atual $ ($ env: username), é executado a partir de outras máquinas Windows:

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

Parabéns a este artigo do vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx

Canoas
fonte
2
Solução muito boa, a única que funcionou para mim sem instalar nenhum software adicional! Obrigado!
t0r0X
2
+1 por trabalhar em um sistema restrito sem nenhum software adicional!
Saustrup 11/08/16
8

PowerShell:

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

Se você precisa ver seus próprios grupos, há whoami /groups:

Exibe os grupos de usuários aos quais o usuário atual pertence.

A vantagem desse comando net user /domain usernameé que as associações implícitas ao grupo também são exibidas whoami.

Dmitry Grigoryev
fonte
Melhor solução. Votado. Curto e grosso. Não trunca. Pessoalmente, eu gosto mais do formato LIST, ou seja whoami /groups /fo list, porque é o mais fácil de ler com os olhos.
Peterh
6

Outra abordagem: um script do PowerShell que lista todas as participações implícitas do grupo no token da conta do Windows. Funciona em um sistema restrito.

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

O adfind é outra ótima ferramenta para esse tipo de coisa. É uma ferramenta gratuita do MVP Joe Richards

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

Você pode usar um dos atalhos

adfind -sc u:username memberof
Mike Kline
fonte
1

Esta versão do PowerShell retorna apenas os nomes dos grupos do AD, em vez do DN do grupo. A saída 'select-object' pode ser facilmente canalizada para um arquivo CSV ou de teste.

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

Nicholas Leader
fonte
0

Powershell, fornece uma saída agradável e limpa.

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

Aqui está uma solução pesquisando todos os domínios no domínio fornecido (assumindo a permissão adequada para cada domínio):

# 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

Usando Get-ADPrincipalGroupMembership

Thomas
fonte
-2

Tente o seguinte:

gpresult -V /user blah
Andrew
fonte