2016-09-27 30 views
1

我有這個PowerShell的片段刪除2個日期之間的電子郵件:如何在搜索郵箱查詢中使用動態日期?

Search-Mailbox -Identity <username> -SearchQuery '(Received:09/20/2012..10/12/2012)' -deletecontent 

我想讓它動態的,所以它刪除電子郵件超過6個月以上。如何計算6個月前在此片段中使用的日期?

我曾嘗試:

$date = (Get-Date).AddMonths(-6) 
Search-Mailbox -Identity Sales -SearchQuery '(Received:<$date)' -DeleteContent 

,但它顯示錯誤消息:

屬性關鍵字不被支持。

+1

這僅僅是基本的日期操作和字符串。使用'Get-Date'及其方法'.AddDays()'將成爲你正在尋找的開始。有沒有什麼你嘗試過,這是不工作? – Matt

+0

@Matt OK,已更新。 – user6888062

+0

好得多。感謝更新。 – Matt

回答

0

$dateSystem.DateTime對象。轉換爲字符串時,它將顯示日期和時間信息,這些信息取決於您的區域設置。這是我的樣子:

PS M:\Scripts> $date = (Get-Date).AddMonths(-6) 

PS M:\Scripts> $date 

Sunday, March 27, 2016 9:30:20 AM 

PS M:\Scripts> "$date" 
03/27/2016 09:30:20 

最後一行不符合要求的標準由KQL (Keyword Query Language)

  • YYYY-MM-DD
  • YYYY-MM-DDTHH:MM:SS
  • YYYY-MM-DDTHH:MM:SSZ
  • YYYY-MM-DDTHH:MM:ssfrZ

既然你只是想讓日期部分讓我們知道。

(Get-Date).AddMonths(-6).ToShortDateString() 
3/27/2016 

雖然不使用連字符,在我的情況下,出現的語法允許它在你的測試用例。有很多方法可以在PowerShell中格式化日期。這是一個符合語法的TechNet

(Get-Date).AddMonths(-6).ToString("yyyy-MM-dd") 
2016-03-27 

的一點是你必須做的事,將滿足您的查詢語法。首先測試一些沒有-deletecontent的字符串,或者只是將字符串寫入控制檯以查看它的外觀。

對於時間跨度應該使用上述建議和一,假設你保存在變量中的字符串結果,它會是這個樣子:

-SearchQuery '(Received:$fromDate..$toDate)'