Есть ли способ из командной строки перечислить всех пользователей в определенной группе Active Directory?
Я могу увидеть, кто в группе, перейдя в Управление компьютером -> Локальный пользователь / группы -> Группы и дважды щелкните группу.
Мне просто нужен способ получения данных из командной строки, чтобы я мог выполнять некоторые другие автоматизированные задачи.
Вот еще один способ из командной строки, но не уверен, насколько он автоматизирован, поскольку вам придется анализировать вывод:
Если группа - «глобальная группа безопасности»:
net group <your_groupname> /domain
Если вы ищете "локальную группу безопасности домена":
net localgroup <your_groupname> /domain
Вот версия команды ds, которую я нашел более полезной, особенно если у вас сложная структура подразделения и вам не обязательно знать полное отличительное имя группы.
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, вам нужно: ТАКЖЕ необходимо выполнить хотя бы одну из следующих установок:
пытаться
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
Для решения PowerShell, для которого не требуется надстройка Quest AD, попробуйте следующее
Import-Module ActiveDirectory
Get-ADGroupMember "Domain Admins" -recursive | Select-Object name
Это также перечислит вложенные группы. Если вы не хотите этого делать, удалите -рекурсивный переключатель.
Очень простой способ, который работает на серверах и клиентах:
NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"
Возвращает 1, если пользователь находится в группе YOURGROUPNAME, иначе вернет 0
Затем вы можете использовать значение% ERRORLEVEL% (0, если пользователь в группе, 1, если нет), например
IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
Используя PowerShell и бесплатную оболочку ActiveRoles Management Shell для Active Directory от Quest Software, вы можете использовать:
(Get-QADGroup "GroupName"). Члены
Ответы здесь с использованием dsget
и dsquery
будет работать только в серверных версиях Windows, поскольку эти команды не поставляются в других версиях Windows (например, Windows 7). На машинах без этих команд вы можете получить нужную информацию с помощью Команда AdFind.
Вот пример запроса для получения членства в группе:
AdFind.exe -default -f name="Domain Admins" member -list
Как составить список локальных групп и пользователей?
Используйте следующий сценарий 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.
Для отображения участников UserGroup1
пытаться:
dsquery group -name UserGroup1 | dsget group -members | dsget user -display