Командний рядок для списку користувачів у групі Windows Active Directory?


136

Чи існує спосіб командного рядка перелічити всіх користувачів у певній групі Active Directory?

Я можу побачити, хто в групі, перейшовши до Керування комп'ютером -> Місцевий користувач / Групи -> Групи та двічі клацнувши на групі.

Мені просто потрібен спосіб командного рядка для отримання даних, тому я можу виконувати деякі інші автоматизовані завдання.

Відповіді:


37

спробуйте

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

1
Напевно, вам потрібно зробити трохи більше, щоб вирішити членів і дублювати членів у вкладених групах.
duffbeer703

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandотримує вас членів у вкладених групах, хоча це може не допомогти з дублікатами, і це дає вам повний рядок запиту AD для члена, а не лише їх CN.
jonnybot

2
Команда не знайдена в Win7 SP1. Я здогадуюсь, що вам потрібно встановити RSAT?
Іссі

11
'dsget' не розпізнається як внутрішня чи зовнішня команда тощо.
часник adolf часник


237

Ось ще один спосіб із командного рядка, не впевнений, наскільки автоматизований, оскільки вам доведеться проаналізувати вихід:

Якщо група - "глобальна група безпеки":

net group <your_groupname> /domain

Якщо ви шукаєте "локальну групу безпеки домену":

net localgroup <your_groupname> /domain

23
не впевнений, чому це було сприйнято ... вихід може зажадати невеликого розбору, але він має перевагу залежно лише від утиліт, які є частиною встановлення базових вікон.
G-Wiz

2
Але чи існує якийсь спосіб навколо усічених імен групи?
deed02392

1
Це чудово! Працював частування.
WOPR

2
Зауважте, що це не рекурсивно і не перераховує групи, які є в групі. Не дуже корисно, якщо у вас є вкладені або ієрархічні групи.
Марк

Це прекрасно працює для мене (і чудово йде рука об руку net user /domain). Дякую!
xan

49

Ось версія команди ds, яку я вважаю більш корисною, особливо якщо у вас складна структура OU і не обов'язково знаєте повну назву групи.

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

або якщо ви знаєте CN групи, зазвичай такий самий, як ідентифікатор SAM, цитований у випадку, якщо у назві є пробіли:

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

Як зазначено в коментарях, за замовчуванням команди ds * (dsquery, dsget, dsadd, dsrm) доступні лише у контролері домену. Однак ви можете встановити пакет інструментів адміністратора з інструментів підтримки на носії встановлення Windows Server або завантажити його з веб-сайту завантаження Microsoft.

Ви також можете виконувати ці запити за допомогою PowerShell. PowerShell вже доступний як інстальована функція для Server 2008, 2008 R2 та Windows 7, але вам потрібно буде завантажити програму WinRM Framework, щоб встановити її на XP або Vista.

Щоб отримати доступ до будь-яких командлетів, що стосуються AD, в PowerShell, ВИ ТАКОЖ необхідно виконати принаймні одну з наступних установок:


Я весь час використовую перший запит
Jim B

1
Майте на увазі, що вам потрібно запустити цю команду на контролері домену.
skolima

9
Ви НЕ повинні виконати цю команду на контролері домену. Тим НЕ менше, ви НЕ повинні бути встановлені адміністратора підтримки пакета .msi , який входить до складу засобів підтримки на компакт - диску Windows 2003 Server. Або скачайте його з microsoft.com/downloads/en/…
Ryan Fisher

24

Для рішення PowerShell, яке не потребує надбудови Quest AD, спробуйте наступне

Import-Module ActiveDirectory

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

Це також перерахує вкладені групи. Якщо ви цього не бажаєте, вийміть -рекурсивний перемикач.


6
Ви впевнені, що модуль ActiveDirectory не вимагає оснащення Quest ActiveRoles AD, але він вимагає, щоб у вас були встановлені інструменти RSAT і щоб ваш AD мав принаймні один DC з будь-якою веб-службою Active Directory (за 2008 рік R2) або встановлена ​​служба шлюзу Active Directory (шлюз управління 2003 (2008)). Детальну інформацію та посилання див. У моїй відповіді вище.
Райан Фішер

16

Дуже простий спосіб роботи на серверах та клієнтах:

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

Повертає 1, якщо користувач у групі YOURGROUPNAME, інше поверне 0

Потім ви можете використовувати значення% ERRORLEVEL% (0, якщо користувач у групі, 1, якщо ні)

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

1
Команда "net group" шукає лише домен (або дерево доменів), де підключений комп'ютер. Більш сучасна альтернатива: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT


7

Відповіді тут використовуються dsgetі dsqueryпрацюватимуть лише на серверних версіях Windows, оскільки ці команди не постачаються в інші версії Windows (наприклад, Windows 7). На машинах без цих команд ви можете отримати потрібну інформацію за допомогою команди AdFind .

Ось приклад запиту на отримання членства в групі:

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

4
ADFind.exe - сторонній інструмент, який ви все одно повинні встановити. Команди ds * можна встановити через пакет інструментів адміністратора.
Райан Фішер

4

Як перелічити місцеві групи та користувачів?

Використовуйте наступний сценарій оболонки, щоб перелічити місцеві групи та членів цих груп.

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

Скопіюйте текст вище в блокнот і збережіть як filename.ps1. Потім запустіть файл. Я повинен відображати Групи та Користувачів у кожній групі, або ви можете просто запустити це з посилань.


Я отримую, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:а потім у запитах на введення,Process[0]
Майк S

3

Для демонстраційних учасників UserGroup1спробуйте:

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

1
Можливо, я хотів би вказати, для якої утиліти CLI ви б цим користувались. Я не думаю, що це станеться занадто добре з cmdякихось причин.
HopelessN00b

@ HopelessN00b: це працює в cmd
Піт

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

@ HopelessN00b: Я отримую помилку, якщо UserGroup1 не існує, спробуйте щось на кшталт "Бухгалтерський облік *"
Піт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.