Powershell

新郵箱搜尋:找不到參數

  • August 17, 2018

我們正在執行 Exchange 2013 並嘗試按照 Microsoft 的範例 3使用 Exchange 命令行管理程序對公用文件夾進行電子數據展示搜尋:

New-MailboxSearch -Name "Contoso Litigation" -AllSourceMailboxes $true -AllPublicFolderSources $true -SearchQuery '"price list" AND "contoso"' -StartDate "01/01/2015" -TargetMailbox "Discovery Search Mailbox"
Start-MailboxSearch "Contoso Litigation"

已根據需要為執行命令的使用者分配了 Exchange 中的“發現管理”角色。但是,當執行第一個命令時,它只會產生以下錯誤:

找不到與參數名稱“AllSourceMailboxes”匹配的參數。

New-MailboxSearch 命令的文件指出此參數對 Exchange 2013 和 2016 均有效。此外,執行Get-Help New-MailboxSearch會輸出以下參數列表:

語法

New-MailboxSearch -Name <String>

$$ -AllPublicFolderSources <$true | $false> $$ $$ -AllSourceMailboxes <$true | $false> $$ $$ -Confirm <SwitchParameter> $$ $$ -Description <String> $$ $$ -DomainController <Fqdn> $$ $$ -EndDate <ExDateTime> $$ $$ -EstimateOnly <SwitchParameter> $$ $$ -ExcludeDuplicateMessages <$true | $false> $$ $$ -Force <SwitchParameter> $$ $$ -IncludeKeywordStatistics <SwitchParameter> $$ $$ -IncludeUnsearchableItems <SwitchParameter> $$ $$ -InPlaceHoldEnabled <$true | $false> $$ $$ -InPlaceHoldIdentity <String> $$ $$ -ItemHoldPeriod <Unlimited> $$ $$ -Language <CultureInfo> $$ $$ -LogLevel <Suppress | Basic | Full> $$ $$ -MessageTypes <KindKeyword[ $$>]$$ -PublicFolderSources <PublicFolderIdParameter[ $$>]$$ -Recipients <String[ $$>]$$ -SearchQuery <String> $$ $$ -Senders <String[ $$>]$$ -SourceMailboxes <RecipientIdParameter[ $$>]$$ -StartDate <ExDateTime> $$ $$ -StatusMailRecipients <RecipientIdParameter[ $$>]$$ -TargetMailbox <MailboxIdParameter> $$ $$ -WhatIf <SwitchParameter> $$ $$ <CommonParameters> $$

如果從命令中刪除 ,-AllPublicFolderSources參數也會出現相同的錯誤。-AllSourceMailboxes

為什麼這些明確記錄的參數不被接受?是什麼阻止了它的工作?

更新

所以我一直在深入研究 powershell 的工作原理,並了解到在本地執行的命令只是一個小的 powershell 函式,它通過“隱式遠端處理”將命令和參數“代理”到 Exchange 伺服器(Exchange 命令行管理程序基本上連接到伺服器通過New-PSSession然後執行Import-PSSession)。真正的 cmdlet 在伺服器上執行並存在於 .NET 二進製文件中。

反編譯該二進製文件會顯示 NewMailboxSearch 類中的以下參數:

private const string ParameterAllPublicFolderSources = "AllPublicFolderSources";
private const string ParameterAllSourceMailboxes = "AllSourceMailboxes";
private const string ParameterDescription = "Description";
private const string ParameterEstimateOnly = "EstimateOnly";
private const string ParameterExcludeDuplicateMessages = "ExcludeDuplicateMessages";
private const string ParameterForce = "Force";
private const string ParameterIncludeKeywordStatistics = "IncludeKeywordStatistics";
private const string ParameterIncludeRemoteAccounts = "IncludeRemoteAccounts";
private const string ParameterIncludeUnsearchableItems = "IncludeUnsearchableItems";
private const string ParameterInPlaceHoldEnabled = "InPlaceHoldEnabled";
private const string ParameterInPlaceHoldIdentity = "InPlaceHoldIdentity";
private const string ParameterItemHoldPeriod = "ItemHoldPeriod";
private const string ParameterLanguage = "Language";
private const string ParameterLogLevel = "LogLevel";
private const string ParameterManagedBy = "ManagedBy";
private const string ParameterMessageTypes = "MessageTypes";
private const string ParameterPublicFolderSources = "PublicFolderSources";
private const string ParameterRecipients = "Recipients";
private const string ParameterSearchQuery = "SearchQuery";
private const string ParameterSenders = "Senders";
private const string ParameterSourceMailboxes = "SourceMailboxes";
private const string ParameterStatusMailRecipients = "StatusMailRecipients";
private const string ParameterTargetMailbox = "TargetMailbox";

因此,cmdlet應該接受失敗的參數。

但是,(Get-Command New-MailboxSearch).Definition在 Exchange 命令行管理程序中執行會轉儲出本地 powershell 函式的程式碼,並且列出以下參數:

param(
 ${Description},
 ${DomainController},
 ${EndDate},
 ${EstimateOnly},
 ${ExcludeDuplicateMessages},
 ${Force},
 ${IncludeKeywordStatistics},
 ${IncludeUnsearchableItems},
 ${InPlaceHoldEnabled},
 ${InPlaceHoldIdentity},
 ${ItemHoldPeriod},
 ${Language},
 ${LogLevel},
 ${MessageTypes},
 ${Name},
 ${Recipients},
 ${SearchQuery},
 ${Senders},
 ${SourceMailboxes},
 ${StartDate},
 ${StatusMailRecipients},
 ${TargetMailbox}
)

Import-PSSession因此,遠端會話以及與之互動的方式似乎存在一些問題。不幸的是,我不夠專業,無法弄清楚原因。

我嘗試將缺少的參數添加到本地函式,但沒有任何區別,而且您也不能只在伺服器上執行真正的二進制 cmdlet,因為您收到此錯誤:

無法執行任務。原因:任務無法辨識正在執行任務的使用者。

顯然 cmdlet只能通過遠端會話使用。

任何人有任何進一步的見解?

根據我的測試,是的,這似乎是 Exchange 2013 中的一個錯誤,但它在 Exchange 2016 中按預期工作。

在 Exchange 2013 CU18 中測試: 在此處輸入圖像描述

在 Exchange 2016 CU8 中測試: 在此處輸入圖像描述

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