PowerShell do Exchange 2010: o método Value.ToMB() falha remotamente, mas funciona localmente

PowerShell do Exchange 2010: o método Value.ToMB() falha remotamente, mas funciona localmente

Estou criando um relatório de determinados atributos de caixa de correio do Exchange Server 2010 usando o PowerShell. O código a seguir funcionou perfeitamente em minha estação de trabalho de gerenciamento usando uma sessão remota.

$Mailboxes = Get-mailbox -ResultSize Unlimited 
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value (Get-MailboxStatistics $Mailbox).TotalItemSize
}

No entanto, quando adicionei o.Valor.ToMb()ao atributo TotalItemSize, o script falhou com o seguinte erro:

$Mailboxes = Get-mailbox -ResultSize Unlimited 
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value ((Get-MailboxStatistics $Mailbox).TotalItemSize.Value.ToMb())
}

Você não pode chamar um método em uma expressão com valor nulo. Na linha:6 char:6 + $Caixa de correio | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull

Não é possível processar a transformação do argumento no parâmetro 'Identidade'. Não é possível converter o valor "[Nome da caixa de correio redigido]" do tipo "Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox" para o tipo "Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter". + CategoryInfo: InvalidData: (:) [Get-MailboxStatistics], ParameterBindin...mationException + FullyQualifiedErrorId: ParameterArgumentTransformationError,Get-MailboxStatistics

E ainda assim... o segundo bloco de código (convertendo o valor TotalItemSize em MB) funciona perfeitamente quando o executo localmente no servidor Exchange. Alguém pode explicar por que isso só falha remotamente?

Responder1

Isso acontece quando você está perdendo os tipos .Net que o Exchange usa. A comunicação remota do PowerShell executa alguma serialização que faz com que alguns objetos acabem como "PsObject" em vez do objeto totalmente digitado. A solução é instalar o Exchange Management Console em seu computador cliente, isso incluirá os tipos .Net necessários.

Responder2

Experimente isto:

Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue

Em seguida, execute o conjunto de comandos.

informação relacionada