【问题标题】:Search-Mailbox SearchQuery not working搜索邮箱 SearchQuery 不工作
【发布时间】:2014-06-10 00:19:29
【问题描述】:

我正在尝试在今天之前删除 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 错误。

【问题讨论】:

    标签: powershell exchange-server exchange-management-shell


    【解决方案1】:

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

    Search-Mailbox myID -SearchQuery Received:<get-date -deleteContent -force
    

    这不起作用,因为get-date 被解析为文字字符串;您没有插入 Get-Date cmdlet 的结果。 -SearchQuery 是一个字符串参数,PowerShell 将字符串参数的参数隐式解释为双引号字符串。要插入 Get-Date 的结果,请使用 -SearchQuery Received:&lt;$(Get-Date)

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

    这不起作用,因为日期格式无效。您可能会推断它应该基于 AQS documentation,但实际上 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 只是当前日期,没有时间。

    【讨论】:

    • 感谢您的回答! Search-Mailbox id_attribute -SearchQuery "Received:&lt;$(Get-Date)" -DeleteContent -Force 这给了我同样的 ol' 关键字错误,并且没有运行。 Search-Mailbox whism_j -SearchQuery "Received:&lt;$(Get-Date -Format ((Get-culture).DateTimeFormat.ShortDatePattern))" -DeleteContent -Force 这个运行成功,但是没有找到数据。似乎当我终于成功运行某些东西时,没有产生任何数据。
    • 我现在已经得出结论,它不喜欢在日期上附加时间。 Search-Mailbox whism_j -SearchQuery "Received:&lt;$(get-date -Format d)" -DeleteContent -Force 这个运行(但仍然没有返回任何东西)。搜索get-date -format G 不会。它抛出关键字错误。
    • 1.尝试在提示符下输入"Received:&lt;$(Get-Date -Format ((Get-culture).DateTimeFormat.ShortDatePattern))",然后告诉我你得到了什么结果。 2. 如果你尝试“Sent”而不是“Received”会发生什么? 3、你说的“没有数据产生”或者“没有返回任何东西”是什么意思?您的意思是您的 ResultItemsCount 为 0,还是根本没有结果?后者不应该发生——即使什么也没找到,你也应该得到一份结果报告。
    • 这听起来像是一个愚蠢的问题,但问一下也无妨……如果是前者,您是否 1000% 确定在邮箱?如果您使用 -DeleteContent,您只会在第一次获得正项目计数,此后除非添加新项目,否则为 0。您是否一直在检查邮箱以确保其中仍有今天之前的数据?也许你没有注意到命令成功了一次,这就是为什么它没有找到更多要删除的内容。
    • 再次,您的帮助很棒,谢谢。不是一个愚蠢的问题,我在这个测试邮箱里有 7 件物品是今天下午早些时候放在那里的。当我简单地运行-deleteContent 时,我得到一个肯定的ResultItemCount。我已重新填充此邮箱的收件箱。当尝试添加SearchQuery 时,我的ResultItemsCountResultItemsSize 为0。这就是我所说的“无数据”。如果它更容易,当我运行 get-culture 时,LCID1033,`Name` 是 en-USDisplayNameEnglish (United States)
    【解决方案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
    

    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!
    

    【讨论】:

    • 很奇怪,但是带有“:Received:>"2018-01-01" 这样的查询返回我一些消息。不确定原因,但这仍然意味着 MS 在隐藏 KQL 解析器细节方面做得很好。赞成有效的例子。
    【解决方案3】:

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

    "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。来自Microsoft's MSDN page

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

    【讨论】:

    • 这样我又收到了一个the property keyword isn't supported。我完全理解你在说什么,但不知道为什么我经常看到这个错误。我什至不能输入像“2014 年 4 月 24 日”这样的具体日期
    • 由于某种原因不喜欢我添加日期和时间...Received:&lt;"2014-04-24T10:51:23" 给了我关键字错误。当我删除 hh:mm:ss 并仅使用 Received:&lt;"2014-04-24" 时,它运行成功但实际上并没有返回任何内容。
    • 其实空格不是问题。 AQS 似乎在解析查询方面非常聪明,据我所知,只有一个空格后跟一个字母序列,然后是 : 被解释为一个新属性。但是,我发现 Search-Mailbox 无法处理 ISO-8601 日期格式,并且需要符合区域设置的格式。我用-SearchQuery "Received:&lt;24/04/2014 15:09:37 kind:Email"之类的查询搜索没有问题。
    • 为了证明这一点,OP 发布的错误消息The property keyword isn't supported确实似乎暗示 PowerShell 将某些内容解释为无效的属性名称;我得到的无效日期格式错误是Please adjust the date time. Make sure it is in the correct format.There is an unexpected character in the query. Please re-type the query and try again. 但是,他现在可能已经尝试了很多事情,以至于我想知道他是否可能混淆了哪个错误消息是针对哪个命令的。使用他的代码,我得到“意外字符”错误。
    • @AdiInbar 除了属性关键字错误之外,我从未收到任何错误。但你是对的,我已经尝试了几十种不同的解决方案。没有 searchQuery 我可以删除所有内容,添加 searchQuery 时我什么也得不到。
    【解决方案4】:

    我使用这种格式并且效果很好 -SearchQuery“已收到:> $(‘22/09/2014 02:15:00’) AND 已收到:

    所以这应该有效: 搜索邮箱 whism_j -SearchQuery“已收到:> $('22/09/2014 02:15:00') AND 已收到:

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 2021-05-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多