* PowerShell 를 이용해서 DB 테이블의 사용자 Mail 을 체크후 메일 발송 부터
발송후 실패 또는 성공에 대한 로그 파일 남기는것과, 이벤트 로그 등록 방법 까지 확인하겠습니다.
스크립트
PowerShell_Mailing.ps1
# 쿼리문 작성
# query1 은 User_Table 에 mail 값만 받아오는 것입니다.
# query2 는 Table_2 에 Group by 절을 이용해서 100개의 userid 값의 100개의 행 이상일때 값을 ID 와 카운트 값을 반환합니다.
$query1 = "Select Email from User_Table"
$query2 = "Select count(userid) as cnt ,userid from Table_2 group by userid having count(userid)>100"#DB 커넥션
$ConnStr = "Server=XXX.XXX.XXX.XXXDatabase=DBName;User ID=UserID;password=Password"
$Conn = New-Object System.Data.SqlClient.SqlConnection($ConnStr)
$Conn.Open()#Query2 문에 대한 커넥션.
$Cmd = New-Object System.Data.SqlClient.SqlCommand($query2,$Conn)
$DR2 = $cmd.ExecuteReader()#로그 저장 메일 query2 에 대한 화면을 저장합니다.
Start-Transcript -path C:\file\LOG_mail_Cnt.log#반복문으로 Raad()
While($DR2.Read())
{
Write-output "카운트값:"$DR2["cnt"] "" "UserID:"$DR2["UserID"]
}
$DR2.Close()#로그 중지
Stop-Transcript#Command (Query1문) User_Table 의 메일 값을 가져옵니다.
$Cmd = New-Object System.Data.SqlClient.SqlCommand($query1,$Conn)#DataReader 저장
$DR = $cmd.ExecuteReader()#로그 기록 시작
Start-Transcript -path C:\file\LOG_mail.log#반목문 으로 Read()
while($DR.Read())
{
# write-output "메일주소 :" $DR[0]
# write-output "클라이언트의 메일주소는 " $DR[0] "입니다." " "
$SmtpServer = "127.0.0.1"
$From = "test@test.com" #보내는사람
#DataReader 로 받아온 메일값을 To 에 입력합니다.
$To = $DR[0] #받는 사람
$subject = "SMTP_Mail_Test"
#메일의 첨부파일로 query2에 대한 값을 보냅니다.
$filename = "C:\file\LOG_mail_Cnt.log"$smtp = new-object system.net.mail.smtpClient($SmtpServer)
$mail = new-object System.Net.Mail.MailMessage
$att = new-object System.Net.Mail.Attachment($filename)
$mail.From = $From
$mail.To.Add($To)
$mail.Subject = $subject
$mail.Body = "첨부파일 확인하시기 바랍니다"
$mail.Attachments.Add($att)
$mail.IsBodyHtml = $false
$smtp.Send($mail)}
#DataReader 닫기
$DR.Close()#로그 중지
Stop-Transcript# 이벤트 로그 생성(1회만 생성)
# new-eventlog -source Event_Test -logname Event_test# 이벤트 로그에 쓰기(이벤트 로그에 메일보낸 값에 대해서 기록합니다.)
$Mail_Send_Event = Get-Content C:\File\Log_mail.log
write-eventlog -logname Event_Test -source Event_Test -eventID 3001 -entrytype Information -message "$Mail_Send_Event" -category 1 -rawdata 10,20#닫기
$Conn.Close()
* 마지막으로 스케줄상에 등록합니다.
등록시에는 파워쉘이 동작할수 있도록 Powershell 의 경로를 정확히 기재해줍니다.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\work\Power_Mailing.ps1
* 이벤트 로그에 기록된 모습입니다.
로그의 내용을 그대로 가져오기 때문에 메일 발송 오류시에는 오류의 내용을 이벤트 로그에 기록하게 됩니다.
* 메일 확인시 아래 이미지와 같이 첨부 파일과 함께 오게 됩니다.
물론 User_Table 의 Email 값에 있는 유져별로 모두 가게 되는것이지요.