为什么您的代码不起作用:
Search-Mailbox myID -SearchQuery Received:<get-date -deleteContent -force
这不起作用,因为get-date
被解析为文字字符串;您没有插入Get-Date cmdlet 的结果。-SearchQuery是一个字符串参数,PowerShell 将字符串参数的参数隐式解释为双引号字符串。要插入Get-Date的结果,请使用-SearchQuery Received:<$(Get-Date)
.
Search-Mailbox whism_j -SearchQuery "Received:<$((get-date).toString("yyyy-MM-ddTHH:mm:ssZ"))" -deleteContent -force
这不起作用,因为日期格式无效。您可能会推断它应该基于AQS 文档,但实际上Search-Mailbox查询中的日期需要采用符合 Exchange 服务器区域设置的格式。
怎么做:
您可能可以通过简单地插入Get-Date的结果来摆脱困境:
Search-Mailbox id_attribute -SearchQuery "Received:<$(Get-Date)" -DeleteContent -Force
但是,这仅在将 DateTime 对象插入字符串时使用的格式(即 )MM/dd/yyyy HH:mm:ss
与区域格式匹配时才有效。为确保您获得正确的格式,请使用Get-Culture确定正确的格式字符串,并将其提供给Get-Date的-Format参数:
如果您想使用今天的日期,您可以使用Get-Date然后将其转换为 RickH 建议的字符串,但这不是必需的,因为 AQS 支持命名相对日期,包括今天:
$format = (Get-Culture).DateTimeFormat.ShortDatePattern + ' ' + (Get-Culture).DateTimeFormat.LongTimePattern
Search-Mailbox myID -SearchQuery "Received:<$(Get-Date -Format $format)" -DeleteContent -Force
请注意,正如我上面所说的那样,如果参数不包含不在括号内的空格,则外部双引号并不是绝对必要的,但我认为包含它们是一种好习惯。
为了完整性和未来搜索者的利益,值得一提的是,AQS 还接受命名的相对日期,例如today
、this week
或last month
,因此这也应该有效:
Search-Mailbox id_attribute -SearchQuery "Received:<today" -DeleteContent -Force
我没有将其作为答案的一部分提供,因为在该问题的先前(已删除)版本中,OP 专门询问了如何在确切时间之前从消息中搜索,并且today
只是没有时间的当前日期。