新郵箱搜尋:找不到參數
我們正在執行 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 中按預期工作。