У меня есть сценарий, написанный на PowerShell, и у меня возникла проблема. Когда я запускаю этот скрипт, я получаю некоторую ошибку в выводе:
Вы не можете вызвать метод для выражения с нулевым значением.
В C: \ scripts \ exchange_rep_work_cp.ps1: 133 символа: 82
+ $ mbx | add-member -membertype noteproperty -value $ stats.TotalItemSize.Value.ToMB <<<< () -name TotalSize
+ CategoryInfo: InvalidOperation: (ToMB: String) [], RuntimeException
+ FullyQualifiedErrorId: InvokeMethodOnNull
Вы не можете вызвать метод для выражения с нулевым значением.
Эта ошибка повторяется несколько раз. Это строка кода (133):
130 $ tmp = ""
131 $ Почтовые ящики | для каждого {
132 # Name_of_company имеет другой домен и контроллер домена
133 if ($ Company -eq "Имя_компании") {
134 $ stats = get-mailboxstatistics -DomainController zzzz.xxx.yyyyyy.local -id $ _ | где> 135 {$.ObjectClass –eq «Почтовый ящик»}}
136 else {
137 $ stats = get-mailboxstatistics -id $ | где {$.ObjectClass –eq «Почтовый ящик»}}
138 $ MBx = новый объект system.object
139 $ tmp = $.EmailAddresses | foreach {if ($ _ -notmatch "yyyyyy.local") {$.AddressString}}
140: $ Country = $.Customattribute1
141: $ Types = $ _. Customattribute2
142: $ mbx | add-member -membertype noteproperty -value $ stats.Displayname -name DisplayName
143: $ mbx | add-member -membertype noteproperty -value $ stats.TotalItemSize.Value.ToMB () -name TotalSize
Пожалуйста, дайте мне совет, что не так
С уважением
Он говорит, что вы пытаетесь позвонить ToMB
метод в строке с именем $stats.TotalItemSize.Value
. Это [string]
и у него нет этого метода.
Вы запускаете сценарий на компьютере с установленной оболочкой 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 не «понимает» вашу фильтрацию и показывает это с помощью не окраска знака доллара в красный цвет.