Ошибка при выполнении удаленного взаимодействия Exchange PS: сбой вызова метода? - PullRequest
0 голосов
/ 16 ноября 2018

Когда я запускаю приведенный ниже скрипт PowerShell, чтобы получить список неактивных учетных записей пользователей AD, почтовый ящик Exchange, который НЕ относится к категории общего почтового ящика.

Сценарий:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://PRODMAIL01-VM/PowerShell/ -Authentication Kerberos
Import-PSSession $Session -AllowClobber

$filter = '(Enabled -eq $false) -and (msExchRecipientTypeDetails -ne 4) -and (homeMDB -ne "$null")'
$properties = @('homeMDB', 'mailNickName', 'mail', 'DisplayName', 'SamAccountName', 'ProxyAddresses')

Get-ADUser -Filter $filter -Properties $properties  |
    ForEach-Object {
    $stat = Get-MailboxStatistics $_.SamAccountName

    $smtpAddresses = ($_.ProxyAddresses | Where-Object {$_ -like "*smtp:*" }) -replace 'smtp:'

    New-Object -TypeName PSObject -Property ([ordered]@{
            DisplayName             = $_.DisplayName
            mailNickName            = $_.mailNickName
            SamAccountName          = $_.SamAccountName
            mail                    = $_.mail
            ProxyAddresses          = $smtpAddresses -join ';'
            HomeMDB                 = $_.homeMDB.Split(',=')[1]
            MBytes                  = $stat.TotalItemSize.Value.ToMB()
            LastLogonTime           = $stat.LastLogonTime
            LastLoggedOnUserAccount = $stat.SamAccountName
            DisconnectDate          = $stat.DisconnectDate
        })
} |
    Sort-Object MBytes -Descending |
    Export-Csv C:\TEMP\Results.csv -NoTypeInformation

Этосообщение об ошибке, которое повторяется тысячи раз:

Ошибка вызова метода, поскольку [Deserialized.Microsoft.Exchange.Data.ByteQuantifiedSize] не содержит метод с именем «ToMB».В строке: 15 символов: 5 + New-Object -TypeName PSObject -Property ([упорядочено] @ {+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (ToMB: String) [], RuntimeException + FullyQualifiedErrorId: MethodNotFound

1 Ответ

0 голосов
/ 16 ноября 2018

Поскольку вы выполняете это в удаленном сеансе, типы возвращаемых объектов теряются.Попробуйте $stat.TotalItemSize.Value.GetType(), и вы заметите, что это PSCustomObject.

Вы можете сделать с некоторым String разбором.Сначала разбейте Value из пробелов:

$stat.TotalItemSize.Value -split " "

Возьмите первый элемент из полученного массива:

($stat.TotalItemSize.Value -split " ")[0]

Наконец приведите его к числу:

[float]($stat.TotalItemSize.Value -split " ")[0]

Строка в вашем коде должна выглядеть следующим образом:

MBytes = [float]($stat.TotalItemSize.Value -split " ")[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...