Riga di comando per elencare gli utenti in un gruppo di Windows Active Directory?


136

Esiste un modo da riga di comando per elencare tutti gli utenti in un determinato gruppo di Active Directory?

Posso vedere chi è nel gruppo andando su Gestisci computer -> Utente locale / Gruppi -> Gruppi e facendo doppio clic sul gruppo.

Ho solo bisogno di un modo da riga di comando per recuperare i dati, quindi posso fare alcune altre attività automatizzate.

Risposte:


37

provare

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

1
Probabilmente dovrai fare un po 'di più per risolvere i membri e duplicare i membri nei gruppi nidificati.
duffbeer703,

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandti porta i membri nei gruppi nidificati, anche se potrebbe non essere d'aiuto con i duplicati e ti dà la stringa di query AD completa per il membro, non solo la loro CN.
jonnybot,

2
Comando non trovato su Win7 SP1. Immagino che hai bisogno di RSAT installato?
Iszi,

11
'dsget' non è riconosciuto come comando interno o esterno, ecc.
adolf garlic


238

Ecco un altro modo dal prompt dei comandi, non sono sicuro di quanto sia automatizzabile poiché dovresti analizzare l'output:

Se il gruppo è "gruppo di sicurezza globale":

net group <your_groupname> /domain

Se stai cercando un "gruppo di sicurezza locale di dominio":

net localgroup <your_groupname> /domain

23
non so perché questo sia stato sottoposto a downgrade ... l'output potrebbe richiedere un po 'di analisi, ma ha il vantaggio di dipendere solo dalle utility che fanno parte dell'installazione di Windows di base.
G-Wiz,

2
Ma c'è un modo per aggirare i nomi dei gruppi troncati?
deed02392,

1
Questo è fantastico! Ha funzionato a meraviglia.
WOPR,

2
Si noti che questo non è ricorsivo e non elenca i gruppi che fanno parte di un gruppo. Non molto utile se hai gruppi nidificati o gerarchici.
Segna il

Questo funziona perfettamente per me (e va di pari passo con net user /domain). Grazie!
xan

49

Ecco una versione del comando ds che ho trovato più tipicamente utile, specialmente se hai una struttura OU complessa e non conosci necessariamente il nome distinto completo del gruppo.

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

o se conosci la CN del gruppo, generalmente uguale all'ID SAM, citato nel caso in cui ci siano spazi nel nome:

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

Come indicato nei commenti, per impostazione predefinita i comandi ds * (dsquery, dsget, dsadd, dsrm) sono disponibili solo su un controller di dominio. Tuttavia, è possibile installare il pacchetto Strumenti di amministrazione dagli Strumenti di supporto sul supporto di installazione di Windows Server o scaricarlo dal sito di download di Microsoft.

È inoltre possibile eseguire queste query tramite PowerShell. PowerShell è già disponibile come funzionalità installabile per Server 2008, 2008 R2 e Windows 7, ma è necessario scaricare WinRM Framework per installarlo su XP o Vista.

Per ottenere l'accesso a qualsiasi cmdlet specifici AD in PowerShell si ANCHE necessario eseguire almeno una delle seguenti installazioni:


Uso sempre la prima query
Jim B

1
Tenere presente che è necessario eseguire questo comando sul controller di dominio.
skolima,

9
È NON deve eseguire questo comando su un controller di dominio. Tuttavia, è DO necessario aver installato l'Admin Support Pack .msi che è incluso negli strumenti di supporto sul CD-ROM di Windows 2003 Server. Oppure scaricalo da microsoft.com/downloads/it/…
Ryan Fisher

24

Per una soluzione PowerShell che non richiede il componente aggiuntivo Quest AD, provare quanto segue

Import-Module ActiveDirectory

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

Ciò enumera anche i gruppi nidificati. Se non si desidera farlo, rimuovere l' interruttore -recursive .


6
Hai ragione sul fatto che il modulo ActiveDirectory non richiede lo snap-in Quest ActiveRoles AD, ma richiede che tu abbia gli strumenti RSAT installati e che il tuo AD abbia almeno un controller di dominio con il servizio Web Active Directory (per il 2008 R2) o Active Directory Management Gateway Service (per controller di dominio 2003, 2008) installati. Vedi la mia risposta sopra per dettagli e collegamenti.
Ryan Fisher,

16

Un modo molto semplice che funziona su server e client:

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

Restituisce 1 se l'utente è nel gruppo YOURGROUPNAME, altrimenti restituirà 0

È quindi possibile utilizzare il valore% ERRORLEVEL% (0 se l'utente nel gruppo, 1 se non) come

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE

1
Il comando "net group" cerca solo il dominio (o l'albero dei domini) a cui è unito il computer. Un'alternativa più moderna è: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT,


7

Le risposte qui utilizzano dsgete dsqueryfunzioneranno solo su versioni server di Windows poiché tali comandi non vengono forniti su altre versioni di Windows (ad esempio Windows 7). Su macchine senza tali comandi è possibile ottenere le informazioni desiderate utilizzando il comando AdFind .

Ecco una query di esempio per ottenere l'appartenenza al gruppo:

AdFind.exe -default -f name="Domain Admins" member -list

4
ADFind.exe è uno strumento di terze parti che devi installare comunque. I comandi ds * sono installabili tramite il pacchetto Strumenti di amministrazione.
Ryan Fisher,

4

Come elencare gruppi e utenti locali?

Utilizzare il seguente script PowerShell per elencare i gruppi locali e i membri di tali gruppi.

$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
}

Copia il testo sopra in nel blocco note e salva come filename.ps1. Quindi eseguire il file. Dovrei visualizzare i gruppi e gli utenti in ciascun gruppo, oppure puoi semplicemente eseguirlo da PowerShell.


Capisco, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:e poi chiede input,Process[0]
Mike S

3

Per i membri di visualizzazione del UserGroup1tentativo:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display

1
Potrei sottolineare in quale utility CLI useresti questo. Non credo che funzionerà troppo bene da cmd, per qualche motivo.
HopelessN00b

@ HopelessN00b: funziona in cmd
Pete

@Pete Newp! dsget failed:'Target object for this command' is missing.
HopelessN00b,

@ HopelessN00b: ottengo un errore se UserGroup1 non esiste, prova qualcosa come "Accounting *"
Pete
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.