Я создаю отчет по определенным атрибутам почтового ящика из Exchange Server 2010 с помощью PowerShell. Следующий код отлично работал с моей рабочей станции управления с использованием удаленного сеанса.
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value (Get-MailboxStatistics $Mailbox).TotalItemSize
}
Однако, когда я добавил.Значение.ToMb()метода к атрибуту TotalItemSize, скрипт завершился с ошибкой:
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value ((Get-MailboxStatistics $Mailbox).TotalItemSize.Value.ToMb())
}
Вы не можете вызвать метод для выражения со значением null. В строке:6 символ:6 + $Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
Невозможно обработать преобразование аргумента для параметра «Identity». Невозможно преобразовать значение «[Mailbox Name Redacted]» типа «Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox» в тип «Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter». + CategoryInfo : InvalidData: (:) [Get-MailboxStatistics], ParameterBindin...mationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-MailboxStatistics
И все же... второй блок кода (преобразование значения TotalItemSize в МБ) отлично работает, когда я запускаю его локально на сервере Exchange. Может кто-нибудь объяснить, почему это не работает только удаленно?
решение1
Это происходит, когда вам не хватает типов .Net, используемых Exchange. PowerShell remoting выполняет некоторую сериализацию, которая приводит к тому, что некоторые объекты оказываются в виде "PsObject" вместо полного строго типизированного объекта. Решение заключается в установке консоли управления Exchange на клиентском компьютере, она будет включать необходимые типы .Net.
решение2
Попробуй это:
Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue
Затем запустите набор команд.