2013-02-14 64 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) 
    } 
}