0

我正在尝试创建有关 Exchange 2010 邮箱大小的简单报告。

虽然这有效:

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

这没有(第二列保持为空):

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

问题是我需要将大小作为整数,所以第一行代码不符合我的目的。根据几个网站,第二行代码应该可以工作,但不幸的是我的机器上没有。

我知道我可以在使用第一行之后解析该值,但这会不必要地低效,不是吗?:-)

希望任何人都可以提供帮助。

问候,凯文

4

10 回答 10

2

这对我有用

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

$a.TotalItemSize.Value.ToMB()

$a.TotalItemSize.Value.ToKB()
于 2011-12-21T21:42:05.240 回答
2

如果从导入的 PS 会话执行,则方法 .ToMB() 将丢失,因为类型变为自定义对象。$variable.TotalItemSize.Value 变成一个两元素数组 [0] 以 KB、MB 或 GB 为单位,而 [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

}

我希望这有帮助

于 2016-03-29T00:54:04.680 回答
1

我有同样的问题。我不确定你是否解决了这个问题。我有这个,这很丑陋 - 但有效:

$a = get-mailbox USER | get-mailboxstatistics
$intTotalItemSize = [int]$a.TotalItemSize.SubString($a.TotalItemSize.indexof("(")+1, $a.TotalItemSize.indexof(" b")-$a.TotalItemSize.indexof("("))
于 2011-09-29T23:08:32.763 回答
0

试试这个为你的尺寸表达:

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

我相信还有一种ToKB()方法。

于 2010-07-01T15:27:50.783 回答
0

名称需要放在表达式之前。这将起作用。

Get-MailboxStatistics -Identity [name] | select @{label=”User”;expression={$_.DisplayName}},lastlogontime,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}}
于 2014-10-21T23:36:37.673 回答
0

请参阅这篇文章: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*
于 2014-06-12T12:21:07.690 回答
0

我需要在远程会话之外进行这项工作,因此我将 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] 对于超过 4GB 的邮箱会失败,因此更改为 [int64]。或者,以 MB 为单位显示邮箱:

Get-MailboxStatistics -Server <serverfqdn> | Select-Object -Property DisplayName,@{label="TotalItemSize";expression={[int64](([int64]($_.TotalItemSize -split '[\( ]')[3])/1048576)}} | ft
于 2014-08-25T20:30:23.330 回答
0

MVP Shay Levy 在他的博客 (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 的一些超酷特性,然后返回解析字符串以获取字节并从那里进行转换。

- 编辑 -

这就是我处理输出所有用户邮箱大小的文件的方式。它可以被进一步压缩,但这种方式更具可读性。

$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)"
}
于 2012-02-10T15:04:52.417 回答
0

这对我有用

@{Name="TotalSize (MB)"; Expression={((($_.TotalItemSize) -split " ")[0])}}
于 2018-01-22T15:44:14.460 回答
-1

你可以试试:

get-mailbox -resultsize unlimited | Get-MailboxStatistics | ft displayname,@{label="Total Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}
于 2016-04-06T18:30:56.317 回答