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.

Respostas:


37

experimentar

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members

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


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

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:


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 .


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

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


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

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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.