Linha de comando para listar usuários em um grupo do Windows Active Directory?

136

Existe uma maneira de linha de comando para listar todos os usuários em um grupo específico do Active Directory?

Para ver quem está no grupo, vá para Gerenciar Computador -> Usuário / Grupos Locais -> Grupos e clique duas vezes no grupo.

Eu só preciso de uma maneira de linha de comando para recuperar os dados, para que eu possa executar outras tarefas automatizadas.

Peter Mortensen
fonte

Respostas:

37

experimentar

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
pQd
fonte
1
Você provavelmente precisará fazer um pouco mais para resolver membros e duplicar membros em grupos aninhados.
duffbeer703
1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandfornece os membros nos grupos aninhados, embora isso não ajude com duplicatas, e fornece a sequência de consultas completa do AD para o membro, não apenas o CN deles.
jonnybot
2
Comando não encontrado no Win7 SP1. Acho que você precisa do RSAT instalado?
Iszi
11
'dsget' não é reconhecido como um comando interno ou externo, etc.
adolf garlic
1
@adolfgarlic - stackoverflow.com/questions/8514599/…
bchilders
238

Aqui está outra maneira do prompt de comando, sem saber o quão automatizável, pois você precisaria analisar a saída:

Se o grupo for "grupo de segurança global":

net group <your_groupname> /domain

Se você estiver procurando por "grupo de segurança local do domínio":

net localgroup <your_groupname> /domain
Comunidade
fonte
23
não sei por que isso foi prejudicado ... a saída pode exigir um pouco de análise, mas tem a vantagem de depender apenas dos utilitários que fazem parte da instalação básica do Windows.
G-Wiz
2
Mas existe alguma maneira de contornar os nomes de grupos truncados?
deed02392
1
Isso é ótimo! Trabalhou um prazer.
WOPR
2
Observe que isso não é recursivo e não lista os grupos que estão em um grupo. Não é muito útil se você tiver grupos aninhados ou hierárquicos.
Mark
Isso funciona perfeitamente para mim (e anda bem de mãos dadas com net user /domain). Obrigado!
xan
49

Aqui está uma versão do comando ds que achei mais útil, principalmente se você tiver uma estrutura complexa de OU e não necessariamente souber o nome distinto completo do grupo.

dsquery group -samid "Group_SAM_Account_Name" | dsget group -members -expand

ou se você conhece o CN do grupo, geralmente o mesmo que o ID do SAM, citado no caso de haver espaços no nome:

dsquery group -name "Group Account Name" | dsget group -members -expand

Conforme declarado nos comentários, por padrão, os comandos ds * (dsquery, dsget, dsadd, dsrm) estão disponíveis apenas em um controlador de domínio. No entanto, você pode instalar o pacote Admin Tools a partir das Ferramentas de Suporte na mídia de instalação do Windows Server ou baixá-lo no site de Download da Microsoft.

Você também pode executar essas consultas usando o PowerShell. O PowerShell já está disponível como um recurso instalável para Server 2008, 2008 R2 e Windows 7, mas você precisará fazer o download do WinRM Framework para instalá-lo no XP ou Vista.

Para obter acesso a qualquer cmdlets específico do AD no PowerShell, você também precisará executar pelo menos uma das seguintes instalações:

Ryan Fisher
fonte
Eu uso a primeira consulta o tempo todo
Jim B
1
Esteja ciente de que você precisa executar este comando no controlador de domínio.
Skolima
9
Você NÃO precisa executar este comando em um controlador de domínio. No entanto, você NÃO precisa ter instalado o Support Pack .msi de administração que está incluído nas ferramentas de suporte no CD-ROM do Windows 2003 Server. Ou faça o download em microsoft.com/downloads/en/…
Ryan Fisher
24

Para uma solução do PowerShell que não requer o suplemento do Quest AD, tente o seguinte

Import-Module ActiveDirectory

Get-ADGroupMember "Domain Admins" -recursive | Select-Object name

Isso enumerará os grupos aninhados também. Se você não desejar, remova a opção -recursive .

pk.
fonte
6
Você está certo de que o módulo ActiveDirectory não requer o snap-in do Quest ActiveRoles AD, mas exige que você tenha as ferramentas RSAT instaladas e que seu AD tenha pelo menos um controlador de domínio com o Serviço da Web do Active Directory (para 2008 R2) ou o Serviço de Gateway de Gerenciamento do Active Directory (para 2003, 2008 DCs) instalado. Veja minha resposta acima para obter detalhes e links.
Ryan Fisher
16

Uma maneira muito fácil que funciona em servidores e clientes:

NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"

Retorna 1 se o usuário estiver no grupo YOURGROUPNAME, caso contrário, retornará 0

Você pode usar o valor% ERRORLEVEL% (0 se usuário do grupo, 1 se não), como

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
deajan
fonte
1
O comando "net group" pesquisa apenas domínio (ou árvore de domínio) em que o computador está associado. Uma alternativa mais moderna é: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT 15/09/2015
10

Usando o Shell de Gerenciamento gratuito de ActiveRoles do PowerShell e da Quest Software para o Active Directory, você pode usar:

(Get-QADGroup "GroupName"). Membros

http://www.quest.com/powershell/activeroles-server.aspx

Gordon Bell
fonte
Também: Get-QADGroupMember 'GroupName'
Gordon Bell
7

As respostas aqui usando dsgete dsqueryfuncionarão apenas nas versões de servidor do Windows, pois esses comandos não são enviados em outras versões do Windows (por exemplo, Windows 7). Em máquinas sem esses comandos, você pode obter as informações desejadas usando o comando AdFind .

Aqui está um exemplo de consulta para obter associação ao grupo:

AdFind.exe -default -f name="Domain Admins" member -list
markshep
fonte
4
O ADFind.exe é uma ferramenta de terceiros que você precisa instalar de qualquer maneira. Os comandos ds * são instaláveis ​​através do pacote Admin Tools.
Ryan Fisher
4

Como listar grupos e usuários locais?

Use o seguinte script do PowerShell para listar os grupos locais e os membros desses grupos.

$server="YourServerName"
$computer = [ADSI]"WinNT://$server,computer"

$computer.psbase.children | where { 

$_.psbase.schemaClassName -eq 'group' } | foreach {
    write-host $_.name
    write-host "------"
    $group =[ADSI]$_.psbase.Path
    $group.psbase.Invoke("Members") | foreach {
$_.GetType().InvokeMember("Name", 'GetProperty', 

$null, $_, $null)}
    write-host
}

Copie o texto acima para o bloco de notas e salve como filename.ps1. Em seguida, execute o arquivo Eu devo exibir os Grupos e Usuários em cada grupo, ou você pode simplesmente executar isso no PowerShell.

Sysadmin
fonte
Eu recebo cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:e, em seguida, solicita entrada, #Process[0]
Mike S
3

Para exibir membros da UserGroup1tentativa:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display
vadim
fonte
1
Talvez queira apontar em qual utilitário CLI você usaria isso. Não acho que isso funcione muito bem cmdpor algum motivo.
HopelessN00b
@ HopelessN00b: isso funciona no cmd
Pete
@Pete Newp! dsget failed:'Target object for this command' is missing.
precisa
@ HopelessN00b: Eu recebo um erro se o UserGroup1 não existir, tente algo como "Accounting *"
Pete