【问题标题】:Query SQL Database and send email for each record - PowerShell查询 SQL 数据库并为每条记录发送电子邮件 - PowerShell
【发布时间】:2021-07-26 05:59:27
【问题描述】:

我正在尝试查询 SQL 数据库,然后遍历每个数据集以发送包含数据的电子邮件。

下面是一个示例数据集 - 因此对于记录 1,我的目标是向 powershell1@whyme.com 发送一封电子邮件,其中包含该特定记录的政策信息,以此类推其余记录。

PolicyNumber            PSN       TransactionPremium    EmailAddress              Record
ABC DE3 0000012183 00   8636692   14109                 powershell1@whyme.com     1
FGH JI3 0000012183 00   8636693  -14199                 powershell2@whyme.com     2
KLM NO3 0000000774 03   8556541   -1664                 powershell3@whyme.com     3
PRS TU3 0000000943 03   8579971   0                     powershell4@whyme.com     4
HCA HO3 0000000969 03   8603944   -1425                 powershell5@whyme.com     5

但是在从查询返回数据后,我无法弄清楚如何遍历每条记录并发送电子邮件。

$Instance = "sqlinstancename"
$Database = "databasename"
$SQL = @'
SELECT TOP (5) PolicyNumber, PSN, CAST(TransactionPremium AS DECIMAL(19,4)) AS TransactionPremium, EmailAddress
FROM dbo.TableName ORDER BY BatchDate DESC
'@

Invoke-DbaQuery -SqlInstance $Instance -Database $Database -Query $SQL 

我认为它会是这样的:

ForEach ($i in i)
{
Send-MailMessage -From "noreply@companyx.com" -To $EmailAddress -Subject "Test" -BodyAsHTML $PolicyNumber"
}

我可以就如何完成这项任务获得一些帮助吗?

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:

    假设查询一切正常,发送电子邮件的循环可能如下所示:

    $Rows = Query-DataBase Query <Query> -Instance <Server\Instance> -Database <DBName>
    
    ForEach( $Row in $Rows)
    {
        $EmailParams = @{
            $From       = 'noreply@companyx.com'
            $To         = $Row.EmailAddress
            $Subject    = 'test'
            $BodyAsHtml = $true
            $Body       = $Row.PolicyNumber
            $SMTPServer = 'YourSMTPServerFQDN'
        }
        Send-EmailMessage @EmailParams
    }
    

    注意:我使用的是 splatting,您可以在 about_Splatting 中了解它。飞溅对格式化和可读性有很大帮助。也就是说,这实际上只是在循环中引用所需的属性,因此每个项目然后发送电子邮件。因此,它可以很容易地扩展,这样您就可以得到正确的正文、主题或其他内容。

    【讨论】:

    • 嘿 - 我很欣赏您的回复,但我不确定这是否能回答我的问题。我连接到 SQL 数据库没有问题 - 我的问题在于获取返回的数据集并遍历每个电子邮件地址以向收件人发送电子邮件。
    • 对不起,我一定是脑子里放了个屁。这实际上很容易。如果你给我一分钟,我可以做一个例子。
    猜你喜欢
    • 2019-02-10
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多