Вы запускаете сценарий на компьютере с установленной оболочкой Exchange Management Shell? Это также включает некоторые типы данных, которые Exchange использует для представления размеров, и без них такие ошибки довольно распространены. Допустимым тестом будет проверка наличия ошибки при его запуске на сервере Exchange.
Также было бы интересно посмотреть ваш код для подключения к экземпляру удаленного взаимодействия Exchange.
РЕДАКТИРОВАТЬ: В вашем коде отсутствуют некоторые подчеркивания здесь и там, поэтому объект статистики в некоторых случаях никогда не будет заполнен. Вот краткое объяснение:
$a = "" | select Name, Value
$a.Name = "Trond"
$a.value = "Yes"
$array = @()
$array += $a
#error
$array | where {$.Name -eq "Trond"}
#success
$array | where {$_.Name -eq "Trond"}
Итак, вкратце: Эта строка:
$stats = get-mailboxstatistics -id $ | where {$.ObjectClass –eq “Mailbox”}}
никогда не создаст объект «$ stats», что, как я подозреваю, является причиной сбоя вашего кода. Если вы используете PowerShell 3.0 ISE, вы должны увидеть, что ISE «не понимает» вашу фильтрацию и показывает это, , а не окрашивая знак доллара в красный цвет.
В нем говорится, что вы пытаетесь вызвать метод ToMB
для строки с именем $ stats.TotalItemSize.Value
. Это [строка]
, и у него нет этого метода.