下面将要介绍的一个脚本同样来自于脚本中心,非常实用,我们可以借助这个脚本来统计每天exchange服务器的sent和received的邮件数量及大小情况。

下载地址:

问题与解答 - Office Total Emails Sent and Received Per Day and Size  https://gallery.technet.microsoft.com/office/f2af711e-defd-476d-896e-8053aa964bc5/view/Discussions

下载下来后,我们拷贝到邮件服务器上,打开EMS进行执行即可,在使用之前,有几个地方是需要做修改的。

首先我们需要在脚本的开头修改starttime,就是指定要检查邮件收发的开始日期,比如我想检查2016/1/1到2016/2/26之间的,那么开始日期就是20161/1,如下。

# Initialize some variables used for counting and for output
$From = Get-Date "1/1/2016"
$To = $From.AddDays(1)

然后我们需要指定结束日期,如下。

While ($To -lt (Get-Date "02/28/2016"))

这个脚本的核心是通过get-messagetrackinglog去检索传输服务器的跟踪日志,统计的结果单位是MB,如下。

Do
{
    # Start building the variable that will hold the information for the day
    $strEmails = "$($From.DayOfWeek),$($From.ToShortDateString()),"
    $intSent = $intRec = 0
    (Get-TransportServer) | Get-MessageTrackingLog -ResultSize Unlimited -Start $From -End $To | ForEach {
        # Sent E-mails
        If ($_.EventId -eq "RECEIVE" -and $_.Source -eq "STOREDRIVER")
        {
            $intSent++
            $intSentSize += $_.TotalBytes
        }
        # Received E-mails
        If ($_.EventId -eq "DELIVER")
        {
            $intRec++
            $intRecSize += $_.TotalBytes
        }
    }
     $intSentSize = [Math]::Round($intSentSize/1MB, 0)
    $intRecSize = [Math]::Round($intRecSize/1MB, 0)

上面这段代码不需要修改。

但是也有例外,如果我们的环境中有多个站点,我希望一次只统计一个站点的邮件收发,那么我们可以对命令做略微的调整,如下,我只统计CAS0*开头的服务器。

(Get-TransportServer cas0*) | Get-MessageTrackingLog -ResultSize Unlimited -Start $From -End $To

统计完成后,结果如下。因为我是在实验环境中运行的,所以结果都是零。

PowerShell-Exchange:统计每天邮件收发_第1张图片

实际生产环境经过整理后可以用excel生成图表。