Send-MailMessage 基于条件

Send-MailMessage based on Conditions

我正在尝试根据以下条件向提交的用户发送电子邮件:

  1. UserCountry = "Yes" 和 UserTeamInTheList = "No" → 发送 MailMessage1
  2. UserCountry = "No" 和 UserTeamInTheList = "No" → 发送 MailMessage2

注意: 另外,我的电子邮件正文是中文的,不会在电子邮件中反映出来。请帮忙。我只有?????在电子邮件中而不是原始消息中。

下面是我使用的查询的输出:

$Q  = "Select * from Query"
$cr = Invoke-Sqlcmd -ServerInstance Server1 -Database DB1 -Query $Q |
      select FileId,SubmittedBy,UserCountry,UserTeamIsInTheList |
      ft -AutoSize
$cr

现在基于以上输出和以上条件,我正在使用以下代码(我正在尝试,当然是错误的代码):

$Q  = "Select * from Query"
$cr = Invoke-Sqlcmd -ServerInstance Server1 -Database DB1 -Query $Q |
      select FileId,SubmittedBy,UserCountry,UserTeamIsInTheList |
      ft -AutoSize
$cr

foreach ($i in $cr) {
    if (UserCountry -eq "Yes" -and UserTeamIsInTheList -eq "No") {
        Send-MailMessage -To ("SubmittedBy" (*User In the Output above who submitted this file*) -CC “abc@xyz.com” -From “xyz@abc.com" -SMTPServer acb.newbie.co  -Subject “Testing” -Body “MailMessage1”
    } elseif {
        if (UserCountry -eq "No" -and UserTeamIsInTheList -eq "No") {
            Send-MailMessage -To ("SubmittedBy" (*User In the Output above who submitted this file*) -CC “abc@xyz.com” -From “xyz@abc.com" -SMTPServer acb.newbie.co  -Subject “Testing” -Body “MailMessage2”
        } else {
            'Exit'
        }
    }

您的代码存在一些问题,但最重要的是您在顶部填充 $CR 变量的位置。您已将 | FT 放在其末尾,这会将对象类型更改为无法在脚本中进一步重复使用的内容。您仍然可以使用 Format-Table 输出此变量,您只需要单独执行即可。

总的来说,我建议你这样做:

$Q = "Select * from Query"
$CR = Invoke-Sqlcmd -ServerInstance Server1 -Database DB1 -Query $Q | Select FileId,SubmittedBy,UserCountry,UserTeamIsInTheList
$CR | FT -AutoSize

$MailSettings = @{
    CC = 'abc@xyz.com'
    From = 'xyz@abc.com'
    SMTPServer = 'acb.newbie.co'
    Subject = 'Testing'
}

$Group1 = $CR | Where ($_.UserCountry -eq 'Yes' -and $_.UserTeamIsInTheList -eq 'No') | Select -ExpandProperty SubmittedBy
Send-MailMessage @MailSettings -To $Group1 -Body 'MailMessage1'

$Group2 = $CR | Where ($_.UserCountry -eq 'No' -and $_.UserTeamIsInTheList -eq 'No') | Select -ExpandProperty SubmittedBy
Send-MailMessage @MailSettings -To $Group2 -Body 'MailMessage2'

您不需要 ForEach 循环,因为您可以使用 Where-Object cmdlet 根据您的条件过滤结果,然后 return 只需 SubmittedBy 属性。然后,因为 Send-MailMessage 接受 -To 参数的数组输入,您可以将此列表提供给 属性。如果您不希望每个收件人看到其他收件人,您可以使用 -BCC 代替,或者执行 ForEach 来单独执行它们(但请注意,在尝试发送大量个人时可能会达到限制电子邮件)。

此外,我还使用了 Splatting 和哈希表,这些设置对于两个 Send-MailMessage 命令都是相同的,因此我们可以重复使用它们而无需重复。