2015-01-05 6 views
0

Я хочу, чтобы получить список всех членов всех групп из активного каталога по следующей формеКак получить все члены всех групп из 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 
+0

Как выглядит ваш скрипт powershell, который использует командлет квеста? Mabe мы могли бы его оптимизировать. Вам нужны только прямые участники или косвенные (через вложенные группы)? В противном случае вы можете использовать adsi. Найдите «powershell get members adsi» или что-то в этом роде. –

+0

@FrodeF. Я добавил фактический скрипт к вопросу, я предпочитаю получать прямые члены, а затем найти другое решение для извлечения дочерних элементов (возможно, через SQL), потому что для получения дочерних элементов также требуется очень много времени. – mcha

+0

«Я бы хотел получить решение который не использует команды cmdlts Quest и AD: «Почему? Вы должны написать его, как старые запросы VBScript, которые обрабатывают запросы LDAP. Это абсолютно грубо и подвержено ошибкам и, вероятно, хуже. –

ответ

0

Я попытался оптимизировать ваш скрипт с помощью командлетов Quest. Вы говорите, что хотели бы иметь только прямых участников, но ваш сценарий использует переключатель -Indirect, который, как вы сказали, заставляет его идти медленно. Попробуйте это:

Get-Content "C:\group_names.txt" | 
Foreach-Object { 
    $group = $_ 
    Get-QADGroupMember "$_" -PageSize 500 -SizeLimit 0 | 
    Select-Object sAMAccountName,@{n="GroupName";e={$group}}, type 
} | Export-CSV C:\group_members.csv -Delimiter "|" -NoTypeInformation 

Вы должны создать свою собственную логику, SQL скрипт и т.д., чтобы связать группы вместе, чтобы вы могли найти косвенные члены. Вы тоже можете сделать это в PowerShell, используя функцию и рекурсию, у меня просто не было времени написать некоторые в этот момент. Я добавил type на ваш вывод, чтобы вы могли легко увидеть, какой член является вложенной группой.

Смежные вопросы