我有这个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
但它显示错误消息:
不支持属性关键字。
答案 0 :(得分:0)
$date
是System.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)'