我正在尝试在今天的日期之前删除Exchange 2013邮箱的内容。它必须特定于我调用Get-Date
cmdlet的第二个。
此代码运行时没有错误:
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
错误。
答案 0 :(得分:2)
为什么您的代码无效:
Search-Mailbox myID -SearchQuery Received:<get-date -deleteContent -force
这不起作用,因为get-date
被解析为文字字符串;您没有插入 Get-Date cmdlet的结果。 -SearchQuery 是一个字符串参数,PowerShell隐式将字符串参数的参数解释为双引号字符串。要插入获取日期的结果,请使用-SearchQuery Received:<$(Get-Date)
。
Search-Mailbox whism_j -SearchQuery "Received:<$((get-date).toString("yyyy-MM-ddTHH:mm:ssZ"))" -deleteContent -force
这不起作用,因为日期格式无效。您可能会推断它应该基于AQS documentation,但实际上 Search-Mailbox 查询中的日期必须采用符合Exchange服务器区域设置的格式。
怎么做:
你可能能够通过简单地插入获取日期的结果来逃脱:
Search-Mailbox id_attribute -SearchQuery "Received:<$(Get-Date)" -DeleteContent -Force
但是,只有将DateTime对象插入到字符串MM/dd/yyyy HH:mm:ss
中时使用的格式与区域格式匹配时,此方法才有效。为确保您获得正确的格式,请使用获取文化来确定正确的格式字符串,并将其提供给获取日期的 -Format 参数:
如果您想使用今天的日期,可以使用获取日期,然后将其转换为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
,因此这也应该有效:< / p>
Search-Mailbox id_attribute -SearchQuery "Received:<today" -DeleteContent -Force
我没有将其作为答案的一部分提供,因为在问题的先前(已删除)版本中,OP专门询问了如何在确切时间之前搜索消息,而today
只是当前日期没有时间。
答案 1 :(得分:2)
当我尝试在Office 365(Exchange Online)上进行日期范围搜索时,这是最佳结果 添加SearchQuery以查找比日期更早的电子邮件,我得到了ResultItemsCount 0。
所以这是我最终通过反复试验找到的:
建议使用ISO dash-not-slash格式:yyyy-mm-dd
VALID搜索:
-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
BROKEN搜索:
-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!
答案 2 :(得分: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是一个标签,但它只是翻译成字母&#34; T&#34;。此外,只需要搜索的项目用引号括起来,而不是整个内容。更新的答案。 Exchange应将查询视为:
Received:<"2014-04-24T10:51:23"
时区偏移是可选的,因为所有时间都应该是UTC。来自Microsoft's MSDN page:
必须根据UTC(协调世界时)(也称为GMT(格林威治标准时间))时区指定所有日期/时间值。 UTC时区标识符(尾随&#34; Z&#34;字符)是可选的。
答案 3 :(得分:1)
我使用这种格式,它工作正常 -SearchQuery&#34;收到:&gt; $('22/09/2014 02:15:00')并收到:&lt; $('22/09/2014 03:15:00')&#34;
所以这应该有效: Search-Mailbox whism_j -SearchQuery&#34;收到:&gt; $('22/09/2014 02:15:00')并收到:&lt; $('22/09/2014 03:15:00')&#34; -deletecontent
如果您想要搜索日期范围而不是特定于第二个,则更容易: Search-Mailbox whism_j -SearchQuery&#34;收到:20/09 / 2014..23 / 09/2014&#34; -deletecontent
此外,我遇到使用SearchQuery执行Search-Mailbox的问题,但它没有找到任何结果,但是没有SearchQuery的Search-Mailbox会显示该消息。 有两件事要检查似乎有效。 首先,将数据库移动到另一台服务器,然后等待(几分钟/小时/天?)然后再次搜索。通常我都能找到这条消息。 接下来是检查它是否实际使用此命令编入索引 Get-FailedContentIndexDocuments test@test.com |其中{$ _。subject -match&#34; some words&#34;} | ft主题,描述-AutoSize