2013-02-14 59 views
0

我有一个从Active Directory获取信息的PowerShell功能。它将发送一封电子邮件,电子邮件的正文将包含与该电子邮件地址关联的任何组。正如你可以看到下面[email protected]列出两次。相反,发送2封电子邮件到[email protected],我宁愿发送一封电子邮件与身体的两个组。我怎样才能做到这一点?谢谢在Powershell中结合结果

email    group 
[email protected]  number1 
[email protected]  number2 
[email protected]  number1 
[email protected]  number3 

(Get-ADUser -Identity lbono –Properties MemberOf | Select MemberOf).MemberOf | Get-ADGroup -Properties ManagedBy | Select Name, ManagedBy, Distinguishedname, GroupCategory | 

Where-Object { 
$_.Distinguishedname -notlike "*Unity*" -and $_.Distinguishedname -notlike "*DynastyGroups*" -and $_.name -notlike "*Technical Library*" }| 
ForEach-Object { 
If ($_.ManagedBy) { 
$result = New-Object PSObject 
Add-Member -input $result NoteProperty 'Group Name' $_.Name 
Add-Member -input $result NoteProperty 'Managed By' ((Get-ADUser -Identity $_.ManagedBy).givenName + ' ' + ((Get-ADUser -Identity $_.ManagedBy).surName)) 
Add-Member -input $result NoteProperty 'Email' (Get-ADUser -Identity $_.ManagedBy -Properties mail).Mail 
Add-Member -input $result NoteProperty 'Group Type' $_.GroupCategory 
Write-Output $result 
} 

} | select 'Group Name','Managed By','Email','Group Type' | sort 'Managed By' 
+2

返回的信息是什么格式?那只是一个纯String对象? – 2013-02-14 22:04:01

+0

格式只是您典型的Powershell输出。 – user1938745 2013-02-14 22:07:15

+1

请提供脚本(如果有的话删除敏感信息)。 – 2013-02-14 22:07:19

回答

1

我认为这是Group-Object cmdlet的完美用例。 片段,展示了如何利用它的优势:

@' 
email,group 
[email protected],number1 
[email protected],number2 
[email protected],number1 
[email protected],number3 
'@ | ConvertFrom-Csv | Group-Object email | foreach { 
    "To: {0} Body: {1}" -f 
     $_.Name, 
     (($_.Group | foreach { $_.group }) -join ', ') 
} 

备选:使用哈希表:

$mails = @{} 
@' 
email,group 
[email protected],number1 
[email protected],number2 
[email protected],number1 
[email protected],number3 
'@ | ConvertFrom-Csv | ForEach-Object { 
    if ($mails.ContainsKey($_.email)) { 
     $mails."$($_.email)" += ", $($_.group)" 
    } else { 
     $mails."$($_.email)" = $_.group 
    } 
} 

$mails.GetEnumerator() | ForEach-Object { 
    "To: {0} Body: {1}" -f $_.Key, $_.Value 
} 
+0

哈希表做了诀窍,谢谢BartekB! – user1938745 2013-02-14 22:20:27

0

因为什么也没有规定我假设你的函数My-Function返回对象的数组,一个对象每个电子邮件+组合组合。 另外,我假设电子邮件和群组存储在名为emailgroup的属性中。

My-Function | Group-Object Email | % { 
    New-Object psobject -Property @{ 
     Email = $_.Name 
     Groups = ($_.Group | select -ExpandProperty Group) 
    } 
}