Exchange 2010 PowerShell:Value.ToMB() 方法远程失败但在本地有效

Exchange 2010 PowerShell:Value.ToMB() 方法远程失败但在本地有效

我正在使用 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
}

然而,当我添加.值.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 + FullyQualifiedErrorId : InvokeMethodOnNull

无法处理参数“Identity”的参数转换。无法将“Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox”类型的“[Mailbox Name Redacted]”值转换为“Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter”类型。+ CategoryInfo : InvalidData: (:) [Get-MailboxStatistics], ParameterBindin...mationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-MailboxStatistics

但是...当我在 Exchange 服务器上本地运行第二段代码(将 TotalItemSize 值转换为 MB)时,它运行正常。有人能解释为什么这只会在远程失败吗?

答案1

当您缺少 Exchange 使用的 .Net 类型时,就会发生这种情况。PowerShell 远程处理执行一些序列化,使某些对象最终成为“PsObject”,而不是完整的强类型对象。解决方案是在您的客户端计算机上安装 Exchange 管理控制台,这将包括您需要的 .Net 类型。

答案2

尝试这个:

Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue

然后运行命令集。

相关内容