我正在使用 PowerShell 從 Exchange Server 2010 建立某些郵箱屬性的報告。以下程式碼使用遠端會話在我的管理工作站上完美運行。
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value (Get-MailboxStatistics $Mailbox).TotalItemSize
}
但是,當我添加.Value.ToMb()方法到 TotalItemSize 屬性,腳本失敗並出現以下錯誤:
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value ((Get-MailboxStatistics $Mailbox).TotalItemSize.Value.ToMb())
}
您不能對空值表達式呼叫方法。位於第 6 行 字元:6 + $Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullQualifiedErrorId:InvokeMethodOnNull
無法處理參數“Identity”的參數轉換。無法將「Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox」類型的「[信箱名稱已編輯]」值轉換為「Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter」類型。 + CategoryInfo : InvalidData: (:) [Get-MailboxStatistics], ParameterBindin...mationException + ExcellentQualifiedErrorId : ParameterArgumentTransformationError,Get-MailboxStatistics
然而...當我在 Exchange 伺服器上本地運行第二個程式碼區塊(將 TotalItemSize 值轉換為 MB)時,它可以完美地工作。誰能解釋為什麼這只能遠程失敗?
答案1
當您缺少 Exchange 使用的 .Net 類型時,就會發生這種情況。 PowerShell 遠端處理執行一些序列化,使某些物件最終成為「PsObject」而不是完整的強型別物件。解決方案是在您的用戶端電腦上安裝 Exchange 管理控制台,這將包括您需要的 .Net 類型。
答案2
嘗試這個:
Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue
然後運行命令集。