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

136

Есть ли в командной строке способ перечислить всех пользователей в определенной группе Active Directory?

Чтобы узнать, кто входит в группу, перейдите в « Управление компьютером» -> « Локальный пользователь / группы» -> « Группы» и дважды щелкните группу.

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

Питер Мортенсен
источник

Ответы:

37

пытаться

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
PQD
источник
1
Возможно, вам нужно сделать немного больше, чтобы разрешить членов и дублировать участников во вложенных группах.
duffbeer703
1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandполучает вас во вложенные группы, хотя это может не помочь с дубликатами, и дает вам полную строку запроса AD для участника, а не только их CN.
Джоннибот
2
Команда не найдена в Win7 SP1. Я предполагаю, что вам нужно установить RSAT?
Изи
11
«dsget» не распознается как внутренняя или внешняя команда и т. д.
Адольф Чеснок
1
@adolfgarlic - stackoverflow.com/questions/8514599/…
bchilders
238

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

Если группа является «глобальной группой безопасности»:

net group <your_groupname> /domain

Если вы ищете «локальная группа безопасности домена»:

net localgroup <your_groupname> /domain
Сообщество
источник
23
не уверен, почему это было опущено ... вывод может потребовать небольшого разбора, но он имеет преимущество в зависимости только от утилит, которые являются частью базовой установки Windows.
G-Wiz
2
Но есть ли способ обойти усеченные имена групп?
deed02392
1
Это здорово! Работал лакомство
WOPR
2
Обратите внимание, что это не является рекурсивным и не перечисляет группы, которые находятся в группе. Не очень полезно, если у вас есть вложенные или иерархические группы.
Марк
Это прекрасно работает для меня (и хорошо сочетается с net user /domain). Спасибо!
Ксан
49

Вот версия команды ds, которую я нашел более полезной, особенно если у вас сложная структура OU и вы не обязательно знаете полное отличительное имя группы.

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

или если вы знаете CN группы, обычно такой же, как SAM ID, который указан в кавычках, если в имени есть пробелы:

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 вы ТАКЖЕ должны выполнить по крайней мере один из следующих установок:

Райан Фишер
источник
Я все время использую первый запрос
Джим Б.
1
Помните, что вы должны выполнить эту команду на контроллере домена.
Сколима
9
Вам НЕ нужно запускать эту команду на контроллере домена. Однако вам НЕОБХОДИМО установить MSI-пакет поддержки администратора, который входит в состав средств поддержки на компакт-диске Windows 2003 Server. Или загрузите его с microsoft.com/downloads/en/…
Райан Фишер,
24

Для решения PowerShell, для которого не требуется надстройка Quest AD, попробуйте следующее

Import-Module ActiveDirectory

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

Это будет перечислять и вложенные группы. Если вы не хотите этого делать, удалите ключ -recursive .

рк.
источник
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
deajan
источник
1
Команда «net group» ищет только домен (или дерево доменов), к которому присоединен компьютер. Более современная альтернатива: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT
10

Используя PowerShell и бесплатную командную консоль ActiveRoles для Active Directory от Quest Software, вы можете использовать:

(Get-QADGroup "GroupName"). Члены

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

Гордон Белл
источник
Также: Get-QADGroupMember 'GroupName'
Гордон Белл,
7

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

Вот пример запроса для получения членства в группе:

AdFind.exe -default -f name="Domain Admins" member -list
markshep
источник
4
ADFind.exe - это сторонний инструмент, который вы все равно должны установить. Команды ds * устанавливаются через пакет инструментов администратора.
Райан Фишер
4

Как составить список локальных групп и пользователей?

Используйте следующий скрипт powershell, чтобы получить список локальных групп и членов этих групп.

$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. Затем запустите файл. Я должен отобразить группы и пользователей в каждой группе, или вы можете просто запустить это из powershell.

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

Для отображения участников UserGroup1попытки:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display
вадим
источник
1
Возможно, стоит указать, в какой утилите CLI вы бы это использовали. Я не думаю, что cmdпо какой-то причине это будет работать слишком хорошо .
HopelessN00b
@ HopelessN00b: это работает в CMD
Пит
@ Пит Ньюп! dsget failed:'Target object for this command' is missing.
HopelessN00b
@ HopelessN00b: я получаю сообщение об ошибке, если UserGroup1 не существует, попробуйте что-то вроде «Бухгалтерия *»
Пит