2012-02-14 61 views
1

我创建了一个包含所有组名称的CSV。以下脚本从“group.csv”中读取所有组名,并列出组和成员。Powershell列出来自AD的组和成员并导出为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 

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

我有以下问题:

是可以: - 对于每个组中的“group.csv”,列出从CSV组,搜索组的AD,显示成员和写组名和用户groupandmem.csv的成员。为“group.csv”中的所有组执行此操作。

-The groupandmem.csv如下填充:

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

行2组2,member1中,members2等

回答

1

如果你开始分配东西给变量,那么你就是阻止powershell将用户从管道的一端“流”到另一端(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 
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

之前,你通过在将所有内容传递到下一个命令之前将所有内容分配给一个变量来进行备份。

更新:增加了$组到当前捕获组名(行)

+0

感谢。是否有可能添加组名,然后在同一行上的所有成员,如:行1组,成员1,成员2,成员3 ....... 第2行第2组,成员1,成员2等 – user1195370 2012-02-14 19:45:01

+0

好吧,编辑组名添加。 – x0n 2012-02-14 20:58:34