Estoy creando un informe de ciertos atributos del buzón de Exchange Server 2010 usando PowerShell. El siguiente código funcionó perfectamente desde mi estación de trabajo de administración mediante una sesión remota.
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value (Get-MailboxStatistics $Mailbox).TotalItemSize
}
Sin embargo, cuando agregué el.Valor.ToMb()método para el atributo TotalItemSize, el script falló con el siguiente error:
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value ((Get-MailboxStatistics $Mailbox).TotalItemSize.Value.ToMb())
}
No se puede llamar a un método en una expresión con valor nulo. En línea:6 carácter:6 + $Buzón | Agregar miembro -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: Operación no válida: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull
No se puede procesar la transformación de argumentos en el parámetro 'Identidad'. No se puede convertir el valor "[Nombre del buzón redactado]" del tipo "Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox" al tipo "Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter". + CategoryInfo: Datos no válidos: (:) [Get-MailboxStatistics], ParameterBindin...mationException + FullyQualifiedErrorId: ParameterArgumentTransformationError,Get-MailboxStatistics
Y aún así... el segundo bloque de código (que convierte el valor TotalItemSize a MB) funciona perfectamente cuando lo ejecuto localmente en el servidor Exchange. ¿Alguien puede explicar por qué esto sólo falla de forma remota?
Respuesta1
Esto sucede cuando faltan los tipos .Net que utiliza Exchange. La comunicación remota de PowerShell realiza cierta serialización que hace que algunos objetos terminen como "PsObject" en lugar del objeto completo con tipo fuerte. La solución es instalar la Consola de administración de Exchange en su computadora cliente, esto incluirá los tipos .Net que necesita.
Respuesta2
Prueba esto:
Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue
Luego ejecute el conjunto de comandos.