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