如何在Search-Mailbox查询中使用动态日期?

时间:2016-09-27 13:16:43

标签: powershell exchange-server

我有这个PowerShell代码段来删除两个日期之间的电子邮件:

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 个答案:

答案 0 :(得分: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)'