Powershell

Exchange 2016 New-Mailboxsearch KQL 查詢幫助 - 這可能嗎?(X 或 Y) 不是 (Z 除非也是 X)

  • March 20, 2019

提前感謝您的閱讀和您可以提供的任何幫助!

 

我正在嘗試對多個郵箱進行郵箱搜尋。我需要找到所有提及某些單詞並且不提及其他單詞的消息,除非這些單詞在兩個列表中。這是一個複雜的搜尋。我不知道如何扭曲關鍵字查詢語言邏輯來實現這一點。

我認識到搜尋命令會很複雜並且需要很長時間才能執行。沒關係。

 

範例:

搜尋提及泰迪的項目。

我想要提到羅斯福的項目。我想要提及 mugwump 的

項目 我想要提及 Rough Riders 的項目

我不想要提及 Franklin Roosevelt 的任何項目。

但是如果一條消息同時提到了泰迪和富蘭克林,我需要那個。

我不想要任何關於“新政”的主題

我不想要任何提到杜魯門的東西。

我想包括萬用字元。

搜尋“羅斯福”肯定會找到“富蘭克林”。我不能單方面排除“富蘭克林”而不錯過一些“泰迪”

 

 

我目前的查詢:

New-MailboxSearch -SearchQuery "Teddy* OR mugwump* OR Roosevelt* OR 'Rough Riders*' NOT ((Franklin* NOT Teddy*) OR Truman* OR subject:'new-deal')"

跑了上面的搜尋。獲得 9,500 次點擊。我發現了一些帶有“mugwump”和“franklin pierce”的電子郵件。這裡有點不對勁。

當我執行“Teddy* OR Roosevelt*”時,我收到了 10,000 次點擊。

當我執行“Teddy* OR Roosevelt* NOT (Franklin* NOT Teddy*)”時,我收到了 9,500 次點擊。所以我認為它有效?

如果這是一個括號問題,我還嘗試了“(Teddy* OR Roosevelt*) NOT (Franklin* NOT Teddy*)”。我仍然收到了 9,500 次點擊。

將積極的搜尋詞括起來並沒有什麼不同。

然後我嘗試了“(泰迪或羅斯福)不是(富蘭克林*)我仍然收到 9,500 次點擊。結果中有富蘭克林的,所以這裡真的有些不對勁。

 

是報價問題嗎?我找不到關於單引號 ’ ’ 與雙引號 " " 的明確文件,以及它們如何影響搜尋運算符和括號。

微軟的 KQL 文件沒有提到它。大多數 KQL 的 Google 熱門歌曲都是針對 Sharepoint,與 Exchange 相比,Sharepoint 具有不同的傾向(和選項)。許多 Exchange 命中實際上是針對 AQS。

我還沒有找到像我這樣帶有嵌套搜尋詞的複雜 KQL 查詢的好例子……

我嘗試用雙引號交換所有單引號。它使我的結果下降到 4,000。這只是一個-EstimateOnly,我沒有機會執行實際工作並檢查結果。

 

 

  1. “NOT (Franklin* NOT Teddy*) 是否會自我否定?

  2. 是否有另一種說法,“包括這個,除非它也包括那個”?

  3. 有沒有更好的安排括號?

  4. 我的報價有問題嗎?

 

 

 

 

謝謝你的幫助!

我想出了一個解決方案。我想分享我的最後一個問題,以及我在此過程中學到的一些重要教訓。

 

第 1 課。如何實現多個括號語句

您只能在查詢中使用一個括號。但是,您可以在該查詢中嵌套另一組括號。

範例:會產生-SearchQuery "(a OR b) AND (c OR d)"錯誤

範例:-SearchQuery "a AND (b AND (c OR d))"工作

我不知道您是否可以在父級內部使用多個括號,或者您是否可以嵌套第三層。沒必要弄清楚。

第 2 課。多個和/或操作數

坦白說,我從來沒有弄清楚操作數的順序是否會影響 SearchQuery 解析結果的方式。我的最終查詢主要由 OR 語句組成,因此我沒有花任何時間深入研究它。

例如:-SearchQuery "a AND b OR c AND d"

    - 這是否等同於“(a AND b)OR(c AND d)”?

    - 或者這相當於“a AND (b OR c) AND d”?

我不知道。沒必要弄清楚。

供未來讀者記住的東西。

第 3 課. 用 {} ‘’ “__” 包裝 -SEARCHQUERY 術語

您可以使用 { }、’ ’ 或 "" 來包裝您的搜尋查詢。

-SearchQuery {wordone OR wordtwo OR "word three"}

-SearchQuery 'wordone OR wordtwo OR "word three"'

-SearchQuery "wordone OR wordtwo OR 'word three'"

我認為每個包裝器在查詢中使用引號/雙引號或萬用字元解析文字術語的方式可能存在一些特殊性。我的現場測試有一些不確定性,這讓我這麼想。

當我創建一個包含一小部分測試消息的測試郵箱進行實驗時,我已經確定了單引號和雙引號。當我弄清楚什麼有效時,這就是我所使用的,所以我再也沒有回去進行進一步的實驗。

 

 

TEST MAILBOX

我創建了一個測試郵箱。我向那個郵箱發送了 16 封電子郵件。

每封電子郵件的主題是“(01 到 16)(好或壞)”。

每封電子郵件的正文都包含基於真實範例的各種模式的搜尋詞。

理想的模式電子郵件在主題中使用“Good”,而不理想的則使用“Bad”。

例如:主題:“05 Good”,正文:“Roosevelt mugwump”

例如:主題:“07 Bad”,正文:“Franklin Roosevelt”

例如:主題:“08 Good”,正文:“Teddy Franklin Roosevelt”

如果我的查詢結果退回任何我知道它失敗的“壞”電子郵件。

如果我的查詢結果沒有返回“良好”的電子郵件,我就知道它失敗了。

 

 

FINAL -SEARCHQUERY

使用該測試郵箱和上面的課程,我建構了以下查詢:

New-MailboxSearch -Name 2019Feb7test13 -Force -SourceMailboxes user1,user2,user3 -StartDate 1/1/1890 -EndDate 1/1/1940 -SearchQuery 'teddy* OR roosevelt* OR mugwump* OR "rough riders*" NOT (franklin* NOT (teddy* OR mugwump* OR "rough riders")) NOT "new-deal" NOT truman*' -TargetMailbox discoveryresults -TargetFolder 2019Feb7test13 -ExcludeDuplicateMessages $true -LogLevel Full -StatusMailRecipients me

(我的實際查詢比這複雜一點,但這個例子可以說明我的解決方案。)

將這個 -SearchQuery 分開,我們有:

匹配任何一個:泰迪熊、羅斯福、

mugwump

、粗糙的騎手

第一個條件選擇所有“羅斯福”,包括“富蘭克林羅斯福”。

第三個條件丟棄任何帶有“富蘭克林”的東西,但也沒有泰迪、mugwump 或粗野的騎手。

 

 

備份計劃

如果我找不到這個問題的解決方案,我的備份計劃將分為兩部分。

  1. 不進行任何過濾就進行搜尋。只是積極的或條款。將結果發送到臨時郵箱,而不是發現框。

  2. 在該臨時郵箱上執行 Search-Mailbox。找到與我不想要的條款匹配的所有項目,然後使用 -DeleteContent 開關。

這可能會奏效,但需要額外的箍。我對我的解決方案更滿意。

引用自:https://serverfault.com/questions/952838