我正在尝试根据以下条件向用户提交电子邮件:
注意:此外,我的电子邮件是中文,不反映在电子邮件中。请帮忙。我只得到??????在电子邮件而不是原始邮件。
以下是我正在使用的查询的输出:
$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'
}
}
答案 0 :(得分:2)
您的代码存在一些问题,但最重要的是您在顶部填充$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根据您的条件过滤结果,然后只返回SubmittedBy
属性。然后,因为Send-MailMessage
接受-To
参数的数组输入,您只需将此列表提供给该属性即可。如果您不希望每个收件人看到其他收件人,您可以改为使用-BCC
,或者ForEach
单独执行这些收件人(但请注意,在尝试发送大量个人时,您可以达到限制电子邮件)。
此外,我使用了Splatting和两个Send-MailMessage
命令相同设置的哈希表,因此我们可以重复使用它们而不必复制。