如何从Active Directory获取所有组的所有成员

时间:2015-01-05 15:53:29

标签: powershell active-directory

我想按照以下格式

从Active目录中检索所有组的所有成员的列表
Group  | Member
----------------
group1 | member1
group1 | member2
group1 | member3
group2 | member1
group2 | member4
...

实际上我有一个使用Quest cmdlts的PowerShell脚本来检索组成员,但性能非常糟糕(最多30小时才能完成提取)所以我只是暂时尝试检索主要组的成员。 我尝试使用DSGET命令,但它没有显示组名或ID,只显示成员列表

dsquery group -limit 0 | dsget group -members

我也尝试使用命令CSVDE,但没有成功 如果可能的话,我想要一个不使用Quest cmdlts和AD cmdlet的解决方案(Get-ADGroupMember ...)

修改 动作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

1 个答案:

答案 0 :(得分:0)

我尝试使用Quest cmdlet优化您的脚本。你说你只想拥有直接成员,但你的脚本仍然使用像你所说的-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,因此您可以轻松查看哪个成员是嵌套组。