1

我正在尝试在今天之前删除 Exchange 2013 邮箱的内容。它必须特定于我调用Get-Datecmdlet 的第二个。

此代码运行没有错误:

Search-Mailbox myID -SearchQuery Received:<Get-Date -DeleteContent -Force

执行此操作时,我在 PowerShell 中看到搜索进度条,但未找到任何数据。我已经三次检查了我正在使用的邮箱,它的数据早于 4/24/14/hh:mm:ss。


我尝试了无数的变化,一个例子是:

Search-Mailbox whism_j -SearchQuery "Received:<$((Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ"))" -DeleteContent -Force`

此命令不执行,因为我得到一个The property keyword isn't supported错误。

4

4 回答 4

2

为什么您的代码不起作用:

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 还接受命名的相对日期,例如todaythis weeklast month,因此这也应该有效:

Search-Mailbox id_attribute -SearchQuery "Received:<today" -DeleteContent -Force

我没有将其作为答案的一部分提供,因为在该问题的先前(已删除)版本中,OP 专门询问了如何在确切时间之前从消息中搜索,并且today只是没有时间的当前日期。

于 2014-04-24T19:03:27.107 回答
2

当我尝试在 Office 365 ( Exchange Online ) 上进行日期范围搜索时,这是一个最佳结果添加 SearchQuery 以查找早于某个日期的电子邮件,我得到 ResultItemsCount 0。

所以这是我通过反复试验最终发现的:

推荐使用 ISO dash-not-slash 格式:yyyy-mm-dd

有效搜索:

-SearchQuery Sent:2016-01-01..2018-01-01
-SearchQuery Sent<2016-01-01
-SearchQuery Sent<=2016-01-01

-SearchQuery "Received>=2016-01-01 AND Received<=2018-01-01"
-SearchQuery Received<2016-01-01
-SearchQuery Received<=2016-01-01

破碎的搜索:

-SearchQuery Received:2016-01-01..2018-01-01  #This style range only valid for Sent.
-SearchQuery Sent:<2016-01-01                 #Putting a : colon before < > less or greater than returns nothing.
-SearchQuery Recieved<2016-01-01              #i before e except after c, no errors for mispelt properties!
于 2017-05-12T15:36:49.970 回答
1

我认为您看到的问题是您的日期字符串中包含空格,因此它将其解释为要过滤的另一个属性。所以它正在阅读:

"Received:<$((get-date).tostring("yyyy-MM-ddTHH:mm:ssZ"))"

它扩展为:

"Received:<2014-04-24 10:51:23-08"

我相信这里有两个属性,Received:因为10:你的日期没有用双引号括起来。这应该适合你:

Search-Mailbox whism_j -SearchQuery Received:<"$((get-date -f "yyyy-MM-ddTHH:mm:ss").tostring())" -deleteContent -force

编辑:对不起,我的错误,出于某种原因,我认为 T 是一个标签,但它只是翻译为字母“T”。此外,只有要搜索的项目用引号引起来,而不是整个项目。更新了答案。Exchange 应将查询视为:

Received:<"2014-04-24T10:51:23"

时区偏移是可选的,因为所有时间都应该是 UTC。从微软的 MSDN 页面

所有日期/时间值都必须根据 UTC(协调世界时)指定,也称为 GMT(格林威治标准时间)时区。UTC 时区标识符(结尾的“Z”字符)是可选的。

于 2014-04-24T17:58:32.987 回答
1

我使用这种格式并且效果很好 -SearchQuery "Received:> $('22/09/2014 02:15:00') AND Received:< $('22/09/2014 03:15:00')"

所以这应该有效: Search-Mailbox whism_j -SearchQuery "Received:> $('22/09/2014 02:15:00') AND Received:< $('22/09/2014 03:15:00')" -删除内容

如果您想搜索一个日期范围而不是特定于第二个,它会容易得多:Search-Mailbox whism_j -SearchQuery "Received:20/09/2014..23/09/2014" -deleteContent

此外,我在使用 SearchQuery 执行 Search-Mailbox 时遇到问题,它没有找到任何结果,但没有 SearchQuery 的 Search-Mailbox 会显示该消息。有两件事要检查似乎有效。首先,将数据库移动到另一台服务器,然后等待(分钟/小时/天?)然后再次搜索。通常我可以找到消息。接下来是检查它是否真的被这个命令索引了 Get-FailedContentIndexDocuments test@test.com | 其中 {$_.subject -match "some words"} |ft 主题,描述 -AutoSize

于 2014-09-23T05:16:51.747 回答