728x90

Exchange mail 송수신 내역을 메일로 발송하는 방법에 대하여 알아 보도록 하겠습니다.

메일서버의 운영중 메일서버의 전체 사용량의 확인 및 특정 사용자의 메일 송수신 카운트를 집계하는 스크립트이며 특정 기간동안에 송수신한 메일의 수를 집계하여 각각의 사용자의 메일 사용량을 확인 할 수 있습니다.

# 각각의 로그에 대한 가져오기 시작 날짜 설정
$Start = (get-date -Date "2010-09-01" -Hour 00 -Minute 00 -Second 00)

# 각각의 로그에 대한 가져오기 끝 날짜 설정
$End = (get-date -Date "2010-09-30" -Hour 23 -Minute 59 -Second 59)

# CSV파일 저장시 파일 이름에 날짜를 찍기 위한 변수   
$date = get-date -Format yyyy-MM-dd

# 선언한 배열에 결과를 저장 
$Results = @()

# CAS01 서버에서 보낸 메시지 가져오기  
$Send = Get-MessageTrackingLog -Server cas01 -Start $Start -End $End -resultsize unlimited | Where { $_.EventID -eq 'Send' -or $_.EventID -eq 'Deliver' }

# CAS01 서버에서 받은 메시지 가져오기 
$Received = Get-MessageTrackingLog -Server cas01 -Start $Start -End $End -resultsize unlimited | Where { $_.EventID -eq 'Receive' -or $_.EventID -eq 'TRANSFER' }

# 검색할 사서함의 호출
$Mailboxes = Get-Mailbox

# 카운터에 대한 진행 표시줄
$Total = $Mailboxes.Count
$Count = 1

# 각각의 사서함의 통계를 내기위한 루프문 
$Mailboxes | Sort-Object DisplayName | ForEach-Object {
 # 업데이트
 $PercentComplete = $Count / $Total * 100
 Write-Progress -Activity "Message Tracking Log Search" -Status "Processing mailboxes" -percentComplete $PercentComplete

 # 출력물의 이름에 대한 각각의 개체 이름 표시
 $Stats = "" | Select-Object Name,Send,Received

 # 사서함의 이메일 주소 
 $Email = $_.WindowsEmailAddress.ToString()

 # 사서함 개체의 이름 속성 표시
 $Stats.Name = $_.DisplayName

 # 보낸 메시지 속성 개수 카운트
 $Stats.Send = ($Send | Where-Object { ($_.EventId -eq "Send" -or $_.EventID -eq "Deliver") -and ($_.Sender -eq $email) }).Count

 # 받은 메시지 속성 개수 카운트
 $Stats.Received = ($Received | Where-Object { ($_.EventId -eq "RECEIVE") -and ($_.Recipients -match $email) }).Count

 # 배열 검색 결과에 해당 사서함에 대한 통계를 추가
 $Results += $Stats

 # 카운터 값에 + 1 
 $Count += 1
}

# 출력 결과를 UTF-8로 인코딩 하여 C:\send\send_receive_log-$date.csv 경로에 CSV파일로 저장
$Results | Export-CSV C:\send\send_receive_log-$date.csv -NoType -Encoding UTF8

# 메일 발송 하기
$FromAddress = "보내는메일주소"
$ToAddress = "받는메일주소"
$MessageSubject = "$date Exchange2010 송수신 통계 내역 입니다."
$MessageBody = "$date Exchange2010 송수신 통계 내역 입니다."
$SendingServer = "보내는메일서버이름"
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, 
$MessageSubject, $MessageBody
$i = "get-date"
$Attachment = New-Object Net.Mail.Attachment("C:\send\send_receive_log-$date.csv")
$SMTPMessage.Attachments.Add($Attachment)
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)


지정한 관리자의 메일로 사용량이 나와있는 CSV파일이 첨부되어 발송된 부분의 확인이 가능합니다.



해당 스크립트의 경우 Exchange powershell을 이용하여 직접 실행 및 아래와 같이 Bat파일로 해당 스크립트를 호출하여 예약된 작업으로 특정 시간에 실행이 되도록 실행이 가능 합니다.

PowerShell.exe -command ". 'c:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\send_log.ps1"


여기까지 Exchange 송수신 내역 메일로 발송하는 방법에 대하여 알아 보았습니다.

728x90

+ Recent posts