0

Active Directory から情報を取得する powershell 関数があります。メールが送信され、メールの本文には、そのメール アドレスに関連付けられているグループが含まれます。以下に示すように、test@email.com が 2 回リストされています。test@email.com に 2 通のメールを送信するのではなく、本文に両方のグループを含む 1 通のメールを送信します。どうすればこれを達成できますか?ありがとう

email               group
test@email.com      number1
test@email.com      number2
notet@email.com     number1
hello@email.com     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'
4

2 に答える 2

1

これは、Group-Objectコマンドレットの完璧なユースケースだと思います。それをどのように利用できるかを示すスニペット:

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

代替:ハッシュテーブルを使用する:

$mails = @{}
@'
email,group
test@email.com,number1
test@email.com,number2
notet@email.com,number1
hello@email.com,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
}
于 2013-02-14T22:09:06.077 に答える
0

何も指定されていないため、関数My-Functionはオブジェクトの配列を返し、メールとグループの組み合わせごとに 1 つのオブジェクトを返すと想定しています。また、 Email と Group は and というプロパティに格納されているとemailgroupます。

My-Function | Group-Object Email | % { 
    New-Object psobject -Property @{
        Email = $_.Name
        Groups = ($_.Group | select -ExpandProperty Group)
    }
}
于 2013-02-14T22:14:27.283 に答える