1

Я пытаюсь получить ежемесячный отчет о полученных электронных письмах из списка адресов электронной почты. Я хочу экспортировать результаты в .csv и, если возможно, отправьте csv автоматически по электронной почте на другой адрес.Получите ежемесячное количество полученных писем в списке почтовых ящиков

Это мой подход в меновой управления скорлупе выглядит так, но не создает каких-либо данных в формате CSV

$mail = @("[email protected]","[email protected]") 
$(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:

mailaddress | счет (полученные письма) | таймфрейм

ответ

2

Вы можете создать настраиваемый объект для каждого результата и вернуть его в массив $output. Затем преобразуйте массив в формат CSV и выведите его в файл.

$mail = @("[email protected]","[email protected]") 
$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" 
"[email protected]","222","10/01/2016","10/31/16" 
"[email protected]","340","10/01/2016","10/31/16" 
+0

как бы я добавить строку с промежутка времени? – Zoba

+1

@Zoba Я обновил свой ответ, чтобы показать время в CSV-файле. – Richard

+1

@ Zoba Update: для вычисления производительности вычислялись временные переменные из цикла. – Richard

0

попробовать это:

$mails = ("[email protected]","[email protected]") 
$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 
+0

это дало бы мне сами сообщения - меня интересует только количество писем в месяц. Чтобы узнать, сколько было отправлено на каждую конкретную учетную запись. – Zoba

+0

Слишком много места между выбором и объектом. Также результатом будет: #TYPE Microsoft.PowerShell.Commands.GroupInfo «Ценности», «Счет», «Группа», «Имя» «System.Collections.ArrayList», «1», «System.Collections.ObjectModel .Collection'1 [System.Management.Automation.PSObject] "," 04.10.2016 13:20:34 " – Zoba