Я хочу, чтобы получить список всех членов всех групп из активного каталога по следующей формеКак получить все члены всех групп из Active Directory
Group | Member
----------------
group1 | member1
group1 | member2
group1 | member3
group2 | member1
group2 | member4
...
На самом деле у меня есть сценарий PowerShell, используя cmdlts Quest которые извлекают членов группы, но производительность очень плохая (до 30 часов, чтобы закончить извлечение), поэтому я пытаюсь восстановить членов первичных групп только на данный момент. Я попытался с помощью команды DSGET
, но он не показывает имя группы или идентификатор, только список членов
dsquery group -limit 0 | dsget group -members
Я также попытался с помощью команды CSVDE
, но без успеха Если возможно, я хотел бы решение который не использует cmdlts Quest ни командлеты AD (Get-ADGroupMember ...)
EDIT: actal Quest cmdlts сценарий, у меня нет знания Powershell, так что я не могу объяснить, как это работает .. .
$csv = get-content "C:\group_names.txt"
$result = $csv | foreach-object { $group=$_ get-qadgroupmember "$_"
-PageSize 500 -sizelimit 0 -indirect |
select-object sAMAccountName,@{n="GroupName";e={$group}} } $result |
export-csv C:\group_members.csv -Delimiter "|" -notypeinformation
Как выглядит ваш скрипт powershell, который использует командлет квеста? Mabe мы могли бы его оптимизировать. Вам нужны только прямые участники или косвенные (через вложенные группы)? В противном случае вы можете использовать adsi. Найдите «powershell get members adsi» или что-то в этом роде. –
@FrodeF. Я добавил фактический скрипт к вопросу, я предпочитаю получать прямые члены, а затем найти другое решение для извлечения дочерних элементов (возможно, через SQL), потому что для получения дочерних элементов также требуется очень много времени. – mcha
«Я бы хотел получить решение который не использует команды cmdlts Quest и AD: «Почему? Вы должны написать его, как старые запросы VBScript, которые обрабатывают запросы LDAP. Это абсолютно грубо и подвержено ошибкам и, вероятно, хуже. –