Powershell从AD列出组和成员并导出为CSV

时间:2012-02-14 18:39:29

标签: powershell

我创建了一个包含所有组名的CSV。以下脚本从“group.csv”中读取所有组名称,并列出组和成员。

脚本:

Add-PSSnapin Quest.ActiveRoles.ADManagement
$csv = Get-Content "f:\Temp\group.csv"

$result = $csv | foreach-object {
$group=$_
get-qadgroupmember "$_" -sizelimit 0 -indirect | select-object samaccountname,@{n="GroupName";e={$group}}
}
$result | export-csv f:\temp\groupandmem.csv -notypeinformation

“group.csv”中有超过1000个组,每个组中有很多成员。脚本的执行因内存问题而停止,并且没有任何内容写入groupandmem.csv,因为这是最后完成的。

我有以下问题:

有可能: - 对于“group.csv”中的每个组,从CSV列出该组,在AD中搜索该组,显示成员并将组名称和成员写入用户组andmem.csv。对“group.csv”中的所有组执行此操作。

- groupandmem.csv填写如下:

第1行组,member1,members2,members3 .......

第2行group2,member1,members2等。

1 个答案:

答案 0 :(得分:1)

如果您开始为变量分配内容,那么您将阻止PowerShell将用户从管道(AD)的一端“流式传输”到另一端(CSV文件)。相反,构建您的管道如下:

Get-Content "f:\Temp\group.csv" | foreach-object {
    $group = $_ # grab current group name
    get-qadgroupmember $group -sizelimit 0 -indirect | `
        select-object samaccountname,@{n="GroupName";e={$group}}
} | export-csv f:\temp\groupandmem.csv -notypeinformation

现在从头到尾有一个真正的“管道”:csv | foreach | get | transform | export

在此之前,您通过将所有内容分配到变量中,然后将其传递到下一个命令来进行备份。

更新:将$ group添加到当前捕获组名称(行)