Exchange 2010 TotalItemSize.Value.ToBytes () всегда пуст - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь создать простые отчеты о размере почтового ящика Exchange 2010.

Пока это работает:

Get-MailboxStatistics -server <serverfqdn> |ft  displayname, TotalItemSize

этого не происходит (второй столбец остается пустым):

Get-MailboxStatistics -server <serverfqdn> |ft  displayname, {$_.TotalItemSize.Value.ToBytes()}

Проблема в том, что мне нужен размер в виде целого числа, поэтому первая строка кода не служит моей цели.Согласно некоторым веб-сайтам, вторая строка кода должна работать, но, к сожалению, не работает на моей машине.

Я знаю, что могу проанализировать значение после использования первой строки, но это было бы излишне неэффективнымне так ли?: -)

Надеюсь, что кто-нибудь может помочь.

С уважением, Кевин

Ответы [ 10 ]

2 голосов
/ 29 марта 2016

При выполнении из импортированного сеанса PS методы .ToMB () теряются, поскольку тип становится пользовательским объектом.$ Variable.TotalItemSize.Value становится массивом из двух элементов [0] в КБ, МБ или ГБ и [1] всегда в байтах.

Таким образом, чтобы использовать это, мы можем играть со строками, чтобы достичь того, что мы хотим.В длинной руке для ясности

$mailboxes = Get-Mailbox -Filter{(RecipientType -eq "UserMailbox") -and (CustomAttribute12 -eq "whatever")}
foreach ($mailbox in $mailboxes)
{
$size1 = Get-MailboxStatistics $mailbox.id 
[string]$bob = $size1.TotalItemSize.Value
[int]$bill = $bob.TrimEnd(" bytes)").Split("(")[1] # The bytes part of the array.
$bill = $bill/1mb # Convert into MB's
if ($bill -le 1500) {do something} Else {"Too Big " + $bill} # note -le 1500 NOT 1500MB

}

Надеюсь, это поможет

2 голосов
/ 22 декабря 2011

это сработало для меня

$a = get-mailbox -id user | Get-MailboxStatistics 

$a.TotalItemSize.Value.ToMB()

$a.TotalItemSize.Value.ToKB()
1 голос
/ 30 сентября 2011

У меня та же проблема. Я не уверен, что вы решили это. У меня есть это, что довольно уродливо - но работает:

$a = get-mailbox USER | get-mailboxstatistics
$intTotalItemSize = [int]$a.TotalItemSize.SubString($a.TotalItemSize.indexof("(")+1, $a.TotalItemSize.indexof(" b")-$a.TotalItemSize.indexof("("))
0 голосов
/ 22 января 2018

Это работает для меня

@{Name="TotalSize (MB)"; Expression={((($_.TotalItemSize) -split " ")[0])}}
0 голосов
/ 06 апреля 2016

Вы можете попробовать:

get-mailbox -resultsize unlimited | Get-MailboxStatistics | ft displayname,@{label="Total Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}
0 голосов
/ 22 октября 2014

Имя должно идти перед выражением.Это будет работать.

Get-MailboxStatistics -Identity [name] | select @{label=”User”;expression={$_.DisplayName}},lastlogontime,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}}
0 голосов
/ 26 августа 2014

Мне нужно было выполнить эту работу вне сеанса удаленного взаимодействия, поэтому я упростил ответ от Greybear на это:

$a = get-mailbox USER | get-mailboxstatistics
$intTotalItemSize = [int64]($a.TotalItemSize -split '[\( ]')[3]

Или в формате исходного вопроса ::

Get-MailboxStatistics -Server <serverfqdn> | Select-Object -Property DisplayName,@{label="TotalItemSize";expression={[int64]($_.TotalItemSize -split '[\( ]')[3]}} | ft

Понял, что [int] не будет работать для почтовых ящиков размером более 4 ГБ, поэтому изменил значение на [int64].Также можно отобразить почтовые ящики в МБ:

Get-MailboxStatistics -Server <serverfqdn> | Select-Object -Property DisplayName,@{label="TotalItemSize";expression={[int64](([int64]($_.TotalItemSize -split '[\( ]')[3])/1048576)}} | ft
0 голосов
/ 12 июня 2014

Пожалуйста, смотрите эту статью: http://blogs.technet.com/b/gary/archive/2010/02/20/the-get-mailboxstatistics-cmdlet-the-totalitemsize-property-and-that-pesky-little-b.aspx

Get-Mailbox | Get-MailboxStatistics | Add-Member -MemberType ScriptProperty -Name TotalItemSizeinMB -Value {$this.totalitemsize.value.ToMB()} -PassThru | Format-Table DisplayName,TotalItem*
0 голосов
/ 10 февраля 2012

MVP Шей Леви вник в это в своем блоге (http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2011/08/22/get-full-control-over-your-exchange-remote-powershell-session.aspx).

По сути, вам нужно изменить параметр в виртуальном каталоге PowerShell на сервере, к которому вы подключаетесь.

Это отличная новость для тех, кто обращает внимание на серверы Exchange, что они имеют такой контроль, но бесполезна для тех из нас, кто использует размещенные решения Exchange и не может изменить эти настройки. Я полагаю, что нам просто придется отказаться от некоторой изощренности PowerShell и вернуться к разбору строки, чтобы получить байты и преобразовать их оттуда.

- EDIT -

Вот как я занялся выводом файла всех размеров почтовых ящиков моих пользователей. Это может быть сжато немного дальше, но это немного более читабельно.

$allMailboxes = Get-Mailbox -ResultSize Unlimited

ForEach ( $mailbox in $allMailboxes ) {
    $itemSizeString = ( Get-MailboxStatistics $mailbox.Identity ).TotalItemSize.Value.ToString()
    $posOpenParen = $itemSizeString.IndexOf("(") + 1
    $numCharsInSize = $itemSizeString.IndexOf(" bytes") - $posOpenParen 
    $mailboxSizeInBytes = $itemSizeString.SubString($posOpenParen,$numCharsInSize).Replace(",","")

    Write-Output "$($mailbox.alias),$($mailboxSizeInBytes)"
}
0 голосов
/ 01 июля 2010

Попробуйте это для выражения вашего размера:

@{expression={$_.TotalItemSize.Value.ToMB()};label="Mailbox Size(MB)"}

Я считаю, что есть также метод ToKB().

...