Powershell在SQL Server

时间:2017-12-11 03:51:22

标签: sql sql-server powershell email cmd

Currenly,我正在设法在SQL服务器中设置powershell作业,以表格格式发送数据库邮件。这是我的剧本:

$SMTPProperties = @{
    To = "abc@abc.com.hk","test@test.com"
    Cc = "xyz@xyz.com"
    From = "test@abc.com.hk"
    Subject = "SQL Report Status"
    SMTPServer = "192.168.xx.xx"
}

$server   = "192.168.xx.xx"
$database = "DBName"
$username = "abc"
$password = "abc124"
$query = "select top 10* from testing"


function ExecuteSqlQuery ($Server, $Database, $query) {


    $Connection = New-Object System.Data.SQLClient.SQLConnection
    $Connection.ConnectionString = "server='$Server';database='$Database';User ID='$username'; Password='$password';trusted_connection=true;"
    $Connection.Open()
    $Command = New-Object System.Data.SQLClient.SQLCommand
    $Command.Connection = $Connection
    $Command.CommandText = $query
    $Reader = $Command.ExecuteReader()

    $Datatable = New-Object System.Data.DataTable
    $Datatable.Load($Reader)
    $Connection.Close()

    return $Datatable
}

$resultsDataTable = New-Object System.Data.DataTable
$resultsDataTable = ExecuteSqlQuery $Server $Database $query


Send-MailMessage @SMTPProperties -Body $query -BodyAsHTML | Format-Table

有几个问题:

1 即可。在@SMTPProperties中,如何向多个收件人发送邮件?的解决
 的 2 即可。该脚本有效,但在收到的电子邮件的内容中,它只是返回     查询文字 (select top 10* from testing) 。它不是     查询结果。
  3 即可。我的脚本是否正确,可以在电子邮件中输出HTML表格     内容?如果没有,我该怎么改呢?  的 4 即可。如何在上面的脚本中不提供UIDPassword来运行上面。

谢谢。

1 个答案:

答案 0 :(得分:0)

对于更多收件人,您可以使用抄送字段

我用它来发送我的Powershell脚本的邮件。

Send-MailMessage `
-Credential $anonCredentials `
-From FromMailAddress@Domain.com `
-To MainMailAddress@Domain.com `
-Cc "FirstRecipient@Domain.com","SecondRecipient@Domain.om","ThirdRecipient@Domain.com" `
-Subject "Enter your subject" -Body "This is an automated message from the server with some data" `
-SmtpServer 192.168.x.x `
-Attachments "C:\ThedataIwanttosend.rar"

如果您尝试在html文件或其他内容中导出报告,然后将其邮寄给必须接收报告的人?这个解决方案适合你吗?如果您运行脚本,您有任何结果吗?

您正在为文本设置$ Query,然后您永远不会使用新内容进行更新。

你的-body将$ query作为文本,因此将该文本作为邮件发送是正确的。

Send-MailMessage @SMTPProperties -Body $query -BodyAsHTML | Format-Table

您是否从正在使用的功能中获取了正确的数据?如果是,则必须将这些结果放在变量中并将该变量写为正文。

现在你有:

$query = "select top 10* from testing"
Send-MailMessage @SMTPProperties -Body $query -BodyAsHTML | Format-Table

所以你收到的邮件会从$ query变量获取-body数据,这是你在$ query变量上设置的文本。

如果您想在该邮件正文中使用其他内容,则必须将其保存到$ query变量中,或者使用结果创建一个新变量,然后将其添加到-Body。

希望它有所帮助。