2017-05-09 65 views
1

我正在寫查詢我們的Exchange服務器的PowerShell腳本的數字每天SENT電子郵件在幾天的列表。如何獲得通過Exchange服務器每天發送的電子郵件2013

我想在excel文件中輸出結果,所以我可以做更多的分析(數據透視表等)。

我遇到的問題是我幾天的硬編碼,但希望這可以靈活地運行幾個月。

$StartTime = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-7), 
$EndTime = (Get-Date -Hour 23 -Minute 59 -Second 59).AddDays(-1), 

ForEach ($Email in $FilterArr) { 
    $MTL = Get-MessageTrackingLog -Start $StartTime -End $EndTime -EventId SEND -ResultSize Unlimited -Sender $Email.Email 

    [Int]$Day0Mail = ($MTL | Where-Object {($_.Timestamp -gt $ArrayStartDates[0]) -And ($_.Timestamp -lt (Get-Date $ArrayStartDates[0] -Hour 23 -Minute 59 -Second 59))}).Count 
    [Int]$Day1Mail = ($MTL | Where-Object {($_.Timestamp -gt $ArrayStartDates[1]) -And ($_.Timestamp -lt (Get-Date $ArrayStartDates[1] -Hour 23 -Minute 59 -Second 59))}).Count 
    ... 

    $MailObj = New-Object -TypeName psobject -Property ([Ordered]@{ 
       Name = $Email.Name 
       Email = $Email.Email 
       [String]$ArrayStartDates[0].ToShortDateString() = $Day0Mail 
       [String]$ArrayStartDates[1].ToShortDateString() = $Day1Mail 
       .... 

    $ReportArr += $MailObj 
} 

$ReportArr | Export-Csv -NoTypeInformation -Path $ReportPath -Force 
+0

...有什麼問題嗎? – gvee

+0

說幾天硬編碼的位,我想設置StartTime爲-180天,並且它爲「Just Work」TM – David

+0

嘗試將'-7'改爲'-180' ..? – gvee

回答

0

您有幾個選項。你可以只是把圍繞這一個Param()塊:

Param(
    $StartTime = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-7), 
    $EndTime = (Get-Date -Hour 23 -Minute 59 -Second 59).AddDays(-1) 
) 

這將讓您的默認設置,但是如果你想超越他們,你可以運行你的腳本是這樣的:

.\YourScript.ps1 -StartTime 01/02/2017 -EndTime (get-date) 

或者,如果你只是想靈活以前它收集數據的天數,加上這樣的帕拉姆塊現有的代碼上面:

Param($Days = 7) 

,然後更改此行,如下所示:

$StartTime = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-$Days) 

再次,像這樣運行腳本:

.\YourScript.ps1 -Days 180 

或者,如果你不想做這個用的參數,你可以使用$Days解決方案,但與Read-Host代替:

$Days = Read-Host "How many days history do you want?" 
$StartTime = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-$Days) 

%的意見,對付你的代碼的其他部分複製,使確保你有一個$Days參數,然後你可以添加一個內循環ForEach像這樣:

$MailObj = New-Object -TypeName psobject -Property ([Ordered]@{ 
      Name = $Email.Name 
      Email = $Email.Email 
     }) 

0..$Days | ForEach-Object { 
    $DayMail = 0 
    $Day = $_ 
    [int]$DayMail = ($MTL | Where-Object {($_.Timestamp -gt $ArrayStartDates[$Day]) -And ($_.Timestamp -lt (Get-Date $ArrayStartDates[$Day] -Hour 23 -Minute 59 -Second 59))}).Count 
    $MailObj | Add-Member -MemberType NoteProperty -Name ($ArrayStartDates[$Day].ToShortDateString()) -Value $DayMail 
} 
+0

我很抱歉標記,但重點是自動化[Int] $ Day0Mail,[Int] $ Day1Mail,[Int] $ Day2Mail,[Int] $ Day3Mail等 – David

+0

好吧,只需要一個簡單的循環,我會修改答案。 –

+0

增加了一個潛在的解決方案,但它沒有經過測試。試試看,我需要模擬一個POC來測試我的身邊。 –

相關問題