2017-05-29 51 views
-2

新手。我有一个平面文件,我想要从PowerShell脚本(例如SQL:SELECT * FROM '[LOGFILEPATH]' WHERE Field1 LIKE '%LOGIN%')中对字符串进行SQL查询,并且如果查询返回任何行,PS脚本应该发送一封电子邮件。我将在稍后添加其他功能,但现在我需要知道如何将结果传递给PS并相应地发送电子邮件。谢谢。根据SQL结果从Powershell发送电子邮件

+0

请参阅[如何提出一个好问题](https://stackoverflow.com/help/how-to-ask)帮助页面。到目前为止您尝试过什么,以及您遇到什么错误/问题? StackOverflow不是代码写入服务。理想情况下提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve) – gms0ulman

回答

0

如果配置了DBMail,您可以从Sql Server本身发送邮件。程序sp_send_dbmail可以将查询结果作为附件发送。像这样,

declare @mailTo varchar(64) = '[email protected]'; 
declare @subj varchar(64) = 'Subject for message'; 
declare @fName varchar(64) = concat('QueryResults-', convert(varchar(10), getdate(), 120), '.txt'); 
exec msdb.dbo.sp_send_dbmail 
@recipients = @mailTo, 
@subject = @subj, 
@query = N'select top(10) column1, column2 from [MyDatabase].[dbo].[SomeTable];', 
@attach_query_result_as_file = 1, 
@query_attachment_filename = @fName; 

这种方法的主要局限性在于,即使没有结果,它也会向您发送一封邮件。为了克服这个问题,可以考虑添加一个if块。像这样,

declare @cnt int = 0; 
set @cnt = (select count(column1) from table where <some conditions apply>); 
if @cnt <> 0 
begin 
    exec msdb.dbo.sp_send_dbmail ... 
end 
0

您可以使用Invoke-SqlCmd2检查表,然后用Send-MailMessage发送邮件。 如果你想自己动手写,而无需使用调用-SqlCmd2你可以做这样的事情:

$server = 'localhost\sqlexpress' 
$database = 'MyDB' 
$query = "SELECT * FROM '[LOGFILEPATH]' WHERE Field1 LIKE '%LOGIN%'" 

$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection 
$dataset = New-Object -TypeName System.Data.DataSet 
$connection.ConnectionString = "Server=$server;Database=$database;Trusted_Connection=True;" 
$connection.Open() 
$command = $connection.CreateCommand() 
$command.CommandText = $query 
$adapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $command 
$rowCount = $adapter.Fill($dataset) 

if ($rowCount -gt 0) { 
    Send-MailMessage ... 
} 

填写你到底需要发送-的MAILMESSAGE细节。