PowerShell:如何使用带有整个数据集值的for循环发送一封邮件

问题描述

我下面是来自SQL查询的数据,并尝试为每个数据集数组发送一封邮件

查询结果:

ID  |  email      | Value <br />
+++++++++++++++ <br/>
1   | abc@mail  | 10 <br />
1   | abc@mail  | 12 <br />
1   | abc@mail  | 13 <br />
2   | def@mail  | 11 <br />
2   | def@mail  | 10 <br />
2   | def@mail  | 15    <br />

我正在使用for循环读取数据

在读取值之后,我试图找到如何使用所有三个条目向每个用户abc @ mail和def@mail.com发送一封邮件。意味着abc @ mail只会收到一封邮件主题中包含以下详细信息,而def @ mail也会收到一封邮件,其中包含其他三个值

ID  | email    |  Value <br />

1    |abc@mail  | 10 <br />
1    |abc@mail  | 12 <br />
1    |abc@mail  | 13 <br />

使用循环代码当前发送邮件,现在每行发送不同的邮件

    foreach ($dataset in $QueryRes)
    {  
         $id = $dataset.ID
         $mail =$dataset.mail
         $value = $dataset.Value
         $Subject = "Testing"
         $BodyText = "<font style='font-family:Calibri' size='2'><b>Hi  
         $mail </b> <br><br>" +
         "some Text"+
         $dataset.ItemArray" + <br><br>"
         Send-MailMessage To "$mail" From "xyz@mail" -subject $subject - 
         BOdy $BodyText -smptpServer "Value"
}
     

请帮助。

解决方法

检查循环中的内容,我会这样做(请注意,我不是Powershell开发人员,所以我提出了一个粗略的想法)

创建一个哈希表并将多个值分配给循环中的一封电子邮件(您不使用id,我忽略了它),请参见代码:

$myHashTable = @{} # creates hash table
if ($myHashTable.ContainsKey($dataset.mail)) {
  $myHashTable[$dataset.mail] += $dataset.Value
} else {
  $myHashTable[$dataset.mail] = @()
  $myHashTable[$dataset.mail] += $dataset.Value
}

创建哈希表后,将其循环并在值中包含所有数据的情况下将邮件发送到每个单个邮件,如下所示:

$myHashTable.Keys | % { "key = $_,value = " + $myHashTable.Item($_) ---do the rest you need here---}

这只是一个想法,可能会有更聪明的方法来做到这一点。我不是说代码有效,我只是检查了如何创建Powershell哈希表并将它们放在一起,所以您可能需要对其进行编辑。

编辑: 我找到了一种对电子邮件here进行分组的方法:

foreach($EmailSet in $QueryRes.Rows |Group-Object "mail")
{
    $Items = $EmailSet.Group |Select-Object Item
    # Compose email containing $Items in here. 
    # You can refer to the email address via $ManagerSet.Name
}