2017-12-11 8 views
1

Currenly, 저는 SQL 서버에서 powershell 작업을 설정하여 일부 결과를 테이블 형식으로 데이터베이스 메일로 보냅니다.Powershell SQL 서버의 쿼리 결과를 이메일로 보내기

$SMTPProperties = @{ 
    To = "[email protected]","[email protected]" 
    Cc = "[email protected]" 
    From = "[email protected]" 
    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에서 여러 수신자에게 어떻게 보낼 수 있습니까? 해결됨
. 스크립트는 작동하지만 수신 된 전자 메일의 내용에서 (select top 10* from testing)이라는 텍스트를 반환합니다. 쿼리 결과가 아닙니다.
. 전자 메일에 HTML 테이블을 출력하도록 스크립트가 올바 릅니까 내용? 그렇지 않다면 어떻게 변경할 수 있습니까?
. 위의 스크립트에서 UIDPassword을 제공하지 않고 어떻게 실행시킬 수 있습니까?

고맙습니다.

+0

왜 $ resultsDataTable을 본문으로 보내지 않으십니까? 작동하는지 모르겠지만, 그보다 더 많은 작업이 필요하다고 생각합니다.하지만 적어도 쿼리 자체가 아니라 쿼리 결과를 얻게됩니다. –

+0

아직 한 게시물에 여러 질문을하는 것이 좋지 않은 스타일로 간주됩니다. 스테프 테오 (StefTheo)가 귀하의 질문에 답변했지만 한 가지 대답 만 수락 할 수 있습니다. –

답변

0

수신자 위해 당신은 내 PowerShell 스크립트에 대한 메일을 보내는 이것을 사용 참조 필드

를 사용할 수 있습니다.

Send-MailMessage ` 
-Credential $anonCredentials ` 
-From [email protected] ` 
-To [email protected] ` 
-Cc "[email protected]","[email protected]","[email protected]" ` 
-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를 텍스트로 설정하면 새로운 내용으로 업데이트되지 않습니다.

your -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에 추가해야합니다.

희망이 있습니다.

+0

스크립트를 이용해 주셔서 감사합니다. 다른 수신자를 추가하면 정상적으로 작동합니다. – user2164919

+0

쿼리 결과를 얻기 위해 스크립트를 어떻게 변경합니까? – user2164919