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 na 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())
}
Você não pode chamar um método em uma expressão com valor nulo. Na linha:6 caractere: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 "[Mailbox Name Redacted]" 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... o segundo bloco de código (convertendo o valor TotalItemSize em MB) funciona perfeitamente quando eu o executo localmente no servidor Exchange. Alguém pode explicar por que isso só falha remotamente?
Isso acontece quando você está perdendo os tipos de .Net que o Exchange usa. A comunicação remota do PowerShell executa alguma serialização que faz com que alguns objetos terminem como "PsObject" em vez do objeto totalmente tipado. A solução é instalar o Exchange Management Console em seu computador cliente, isso incluirá os tipos .Net de que você precisa.
Tente isto:
Em seguida, execute o conjunto de comandos.