【问题标题】:Get monthly count of received mails in list of inboxes获取收件箱列表中收到的邮件的每月计数
【发布时间】:2017-02-15 00:18:32
【问题描述】:

我正在尝试从电子邮件地址列表中获取收到的电子邮件的月度报告。我想将结果导出到 .csv,如果可能的话,通过电子邮件将 csv 自动发送到另一个地址。

这是我在 exchange-management-shell 中的方法,看起来像这样,但没有在 .csv 中创建任何数据

    $mail = @("mymail@mydomain.com","another@mydomain.com")
$(foreach ($name in $mail)
{
    $startofmonth = Get-Date -format MM/dd/yyyy -day 1 -hour 0 -minute 0 -second 0
    $endofmonth = ((Get-Date -day 1 -hour 0 -minute 0 -second 0).AddMonths(1).AddSeconds(-1))
    $endofmonth = "{0:MM/dd/yy}" -f [datetime]$endofmonth

    $results = (Get-MessageTrackingLog -ResultSize unlimited -recipients $name -Start $startofmonth -End $endofmonth -EventId RECEIVE).count
    $results
}) | Export-CSV -path \\mymachine\c$\output.csv -NoTypeInformation

如何在 .csv 中获取我想要的数据:

邮件地址 |计数(收到的邮件) |时间范围

【问题讨论】:

    标签: powershell exchange-server exchange-management-shell


    【解决方案1】:

    您可以为每个结果创建一个自定义对象并将其返回到数组$output。然后将数组转换为CSV 格式并输出到文件中。

    $mail = @("mymail@mydomain.com","another@mydomain.com")
    $startofmonth = Get-Date -format MM/dd/yyyy -day 1 -hour 0 -minute 0 -second 0
    $endofmonth = ((Get-Date -day 1 -hour 0 -minute 0 -second 0).AddMonths(1).AddSeconds(-1))
    $endofmonth = "{0:MM/dd/yy}" -f [datetime]$endofmonth
    
    [Array]$output = foreach ($name in $mail) {
    
        $results = (Get-MessageTrackingLog -ResultSize unlimited -recipients $name -Start $startofmonth -End $endofmonth -EventId RECEIVE).count
    
        [pscustomobject]@{
            Name=$name;
            Received=$results;
            StartTime=$startofmonth;
            EndTime=$endofmonth;
        }
    }
    
    $output | ConvertTo-Csv -NoTypeInformation | Out-File -FilePath \\mymachine\c$\output.csv -Append 
    

    这将返回一个如下所示的CSV 文件:

    "Name","Received","StartTime","EndTime"
    "mymail@mydomain.com","222","10/01/2016","10/31/16"
    "another@mydomain.com","340","10/01/2016","10/31/16"
    

    【讨论】:

    • 如何添加具有时间跨度的行?
    • @Zoba 我已更新我的答案以在 CSV 文件中显示时间跨度。
    • @Zoba 更新:将时间变量的计算排除在循环之外以提高性能。
    【解决方案2】:

    试试看:

     $mails = ("mymail@mydomain.com","another@mydomain.com")
     $startofmonth = Get-Date -format MM/dd/yyyy -day 1 -hour 0 -minute 0 -second 0
     $endofmonth = ((Get-Date -day 1 -hour 0 -minute 0 -second 0).AddMonths(1).AddSeconds(-1))
     $endofmonth = "{0:MM/dd/yy}" -f [datetime]$endofmonth
    
    
     Get-MessageTrackingLog -ResultSize Unlimited -Start $startofmonth -End  $endofmonth -EventId RECEIVE | where{$_.Recipients -in   $mails} | select- object  Timestamp,SourceContext,Source,EventId,MessageSubject,Sender, {$_.Recipients} | 
    group-object -property Timestamp |
    export-csv C:\temp\MessageTrackingLogResults.csv
    

    【讨论】:

    • 这会给我消息本身 - 我只对每月的邮件数量感兴趣。跟踪发送到每个特定帐户的金额。
    • 选择和对象之间的空间太大。结果也是:#TYPE Microsoft.PowerShell.Commands.GroupInfo "Values","Count","Group","Name" "System.Collections.ArrayList","1","System.Collections.ObjectModel.Collection `1[System.Management.Automation.PSObject]","04.10.2016 13:20:34"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2017-06-09
    相关资源
    最近更新 更多