سؤال

أحاول إنشاء تقارير بسيطة عن حجم صندوق بريد Exchange 2010.

بينما يعمل هذا:

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

هذا لا (العمود الثاني يبقى فارغًا):

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

المشكلة هي أنني بحاجة إلى الحجم كصاحب صحيح ، وبالتالي فإن السطر الأول من التعليمات البرمجية لا يخدم غرضي. وفقا لعدة مواقع الويب السطر الثاني من الكود ينبغي العمل ولكن للأسف لا على جهازي.

أعلم أنه يمكنني تحليل القيمة بعد استخدام السطر الأول ولكن هذا سيكون غير فعال بشكل غير ضروري ، أليس كذلك؟ :-)

أتمنى أن يساعد أي شخص.

التحيات ، كيفن

هل كانت مفيدة؟

المحلول

إذا كان الأداء من جلسة 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

}

آمل أن يساعد هذا

نصائح أخرى

هذا عمل بالنسبة لي

$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/08/22/get-full-control-over-your-evchange-remote-powershell -session.aspx).

في الأساس ، يجب عليك تعديل إعداد في الدليل الظاهري PowerShell على الخادم الذي تقوم به بعد.

هذه أخبار رائعة لأولئك الذين يقومون بتبادل الخوادم التي لديهم هذا النوع من السيطرة ، ولكن ليس مفيدًا لأولئك منا الذين يستخدمون حلول التبادل المستضافة ولا يمكنهم تغيير هذه الإعدادات. أفترض أنه سيتعين علينا فقط التخلي عن بعض برودة 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-totalitemsize-property-and-tat-pesky-little-b.aspx

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] ستفشل في صناديق البريد أكثر من 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()}}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top