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.