Exchange 2010 alteritemsize.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.totalitemsize.value成为Kb,Mb或GB中的两个元素数组[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()
方法。
MVP Shay Levy已在他的博客(http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2011/2011/22/get-full-control-control-control-control-control-control-control-control-your-exchange-remote-powershell-remote-powershell--remote-powershell-- -session.aspx)。
基本上,您必须在服务器上的PowerShell虚拟目录中修改设置。
对于那些远程交换服务器的人来说,这是一个好消息,他们对他们有这种控制权,但对于那些使用托管交换解决方案并且无法更改这些设置的人并不有帮助。我想我们只需要放弃PowerShell的一些Uber-Coolness,然后回到解析字符串以获取字节并从那里转换。
- 编辑 -
这就是我处理输出所有用户邮箱大小的文件的方式。它可以进一步压缩,但这种方式更可读。
$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)"
}
Get-Mailbox | Get-MailboxStatistics | Add-Member -MemberType ScriptProperty -Name TotalItemSizeinMB -Value {$this.totalitemsize.value.ToMB()} -PassThru | Format-Table DisplayName,TotalItem*
我需要在远程课程之外进行这项工作,因此我简化了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
该名称需要在表达式之前使用。这将起作用。
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()}}