Exchange 2010 totalitemsize.value.tobytes () всегда пусто
-
01-10-2019 - |
Вопрос
Я пытаюсь создать простые отчеты на размере почтового ящика Exchange 2010.
Пока это работает:
Get-MailboxStatistics -server <serverfqdn> |ft displayname, TotalItemSize
Это не (вторая колонна остается пустой):
Get-MailboxStatistics -server <serverfqdn> |ft displayname, {$_.TotalItemSize.Value.ToBytes()}
Проблема в том, что мне нужен размер в целом, поэтому первая строка кода не служит моей цели. Согласно нескольким веб-сайтам вторая строка кода должен работа, но к сожалению не на моей машине.
Я знаю, что смогу разобрать ценность после использования первой строки, но это было бы ненужно неэффективно, не так ли? :-)
Надеюсь, кто может помочь.
С уважением, Кевин
Решение
При выполнении из импортируемой сессии PS методы .tomb () теряется, поскольку тип становится пользовательским объектом. $ Variable.totalitemazize.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
}
надеюсь, это поможет
Другие советы
Это сработало для меня
$a = get-mailbox -id user | Get-MailboxStatistics
$a.TotalItemSize.Value.ToMB()
$a.TotalItemSize.Value.ToKB()
У меня такая же проблема. Я не уверен, что вы решили это. У меня это, что вполне уродливо - но работает:
$a = get-mailbox USER | get-mailboxstatistics
$intTotalItemSize = [int]$a.TotalItemSize.SubString($a.TotalItemSize.indexof("(")+1, $a.TotalItemSize.indexof(" b")-$a.TotalItemSize.indexof("("))
Попробуйте это для выражения вашего размера:
@{expression={$_.TotalItemSize.Value.ToMB()};label="Mailbox Size(MB)"}
Я считаю, что есть также ToKB()
метод.
МВП Шей Леви влюбился в это в своем блоге (http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2011/08/22/get-full-control-over-your-exchange-remote-powerShell -session.aspx).
По сути, вы должны изменить настройку в виртуальном каталоге PowerShell на сервере, к которому вы отказываетесь.
Это отличные новости для тех, кто удаляет обмениваться серверами, которые у них есть такой контроль, но не полезен для тех из нас, кто использует размещенные решения Exchange и не может изменить эти настройки. Я полагаю, нам просто придется отказаться от некоторых из Убер-охлаждения PowerShell и вернуться к разборке строки, чтобы получить байты и конвертировать оттуда.
--РЕДАКТИРОВАТЬ--
Вот как я решил выводить файл всех размеров почтовых ящиков моих пользователей. Это может быть сжато немного дальше, но это немного более читаемо.
$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)"
}
Пожалуйста, смотрите эту статью: http://blogs.technet.com/b/gary/archive/2010/02/20/the-get-mailboxstatistics-cmdlet-the-totalitemazize-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*
Мне нужно было иметь эту работу за пределы удаленного сеанса, поэтому я упростил ответ от грейбой к этому:
$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]. Поочередно, отобразите почтовые ящики в MB:
Get-MailboxStatistics -Server <serverfqdn> | Select-Object -Property DisplayName,@{label="TotalItemSize";expression={[int64](([int64]($_.TotalItemSize -split '[\( ]')[3])/1048576)}} | ft
Имя должно идти до выражения. Это будет работать.
Get-MailboxStatistics -Identity [name] | select @{label=”User”;expression={$_.DisplayName}},lastlogontime,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}}
Это работает для меня
@{Name="TotalSize (MB)"; Expression={((($_.TotalItemSize) -split " ")[0])}}
Вы можете попробовать:
get-mailbox -resultsize unlimited | Get-MailboxStatistics | ft displayname,@{label="Total Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}