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 송수신 내역 메일로 발송하는 방법에 대하여 알아 보았습니다.
'IT이야기 > Exchange' 카테고리의 다른 글
Exchange 사서함 사용량 메일로 발송하기 (0) | 2016.12.08 |
---|---|
exchange Server 대량 계정 등록하기 (0) | 2016.12.08 |
메일사서함에서 보낸사람 or 제목으로 검색 (0) | 2016.12.08 |
DAG 상태 체크 파워쉘 (0) | 2016.12.02 |
[Exchange2013/2016] OWA 세션 타임아웃 설정 레지스터리 (0) | 2016.04.14 |