Exchange 2010 TotherItemize.Value.Tobytes()は常に空です
-
01-10-2019 - |
質問
Exchange 2010のメールボックスサイズに関する簡単なレポートを作成しようとしています。
これが機能しますが、
Get-MailboxStatistics -server <serverfqdn> |ft displayname, TotalItemSize
これはそうではありません(2番目の列は空のままです):
Get-MailboxStatistics -server <serverfqdn> |ft displayname, {$_.TotalItemSize.Value.ToBytes()}
問題は、整数としてサイズが必要であるため、コードの最初の行が私の目的に役立たないことです。いくつかのウェブサイトによると、コードの2行目 したほうがいい 仕事ですが、残念ながら私のマシンではありません。
最初の行を使用した後に値を解析できることは知っていますが、それは不必要に非効率的ですよね? :-)
誰でも助けることができることを願っています。
よろしく、ケビン
解決
インポートされたPSセッションから実行すると、タイプがカスタムオブジェクトになるとメソッド.Tomb()が失われます。 $ variable.totalitemsize.valueは、KB、MB、またはGBの2つの要素アレイ[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/2011/08/22/get-full-control-over-exchange-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*
リモートセッションの外でこの作業を行う必要があったので、グレイベアからの答えを簡素化しました。
$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()}}