2016-09-27 28 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)'