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

1

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 método .Value.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())
}

You cannot call a method on a null-valued expression. At line:6 char:6 + $Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

Cannot process argument transformation on parameter 'Identity'. Cannot convert the "[Mailbox Name Redacted]" value of type "Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox" to type "Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter". + CategoryInfo : InvalidData: (:) [Get-MailboxStatistics], ParameterBindin...mationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-MailboxStatistics

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

    
por SturdyErde 20.05.2015 / 21:41

2 respostas

2

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

    
por 21.05.2015 / 11:02
1

Tente isto:

Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue

Em seguida, execute o conjunto de comandos.

    
por 20.05.2015 / 22:19