Domanda

Sto cercando di creare semplici report su Exchange 2010 dimensione della cassetta postale.

Anche se questo funziona:

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

questo non (Dettaglio seconda colonna vuota):

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

Il problema è che ho bisogno la dimensione come un intero, in modo che la prima riga di codice non serve il mio scopo. Secondo diversi siti web la seconda riga di codice dovrebbe di lavoro, ma purtroppo non lo fa sulla mia macchina.

So che avrei potuto analizzare il valore dopo aver usato la prima linea ma che sarebbe inutilmente inefficiente, non è vero? : -)

La speranza qualcuno può aiutare.

Saluti, Kevin

È stato utile?

Soluzione

Se si esegue da una sessione PS importato i metodi .ToMB () viene perso come il tipo diventa un oggetto personalizzato. Il $ variable.TotalItemSize.Value diventa una matrice di due elementi [0] in KB, MB o GB e [1] sempre in byte.

Quindi, per utilizzare questo possiamo giocare con le stringhe per ottenere ciò che vogliamo .. in lunga mano per chiarezza

$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

}

Spero che questo aiuta

Altri suggerimenti

questo ha funzionato per me

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

$a.TotalItemSize.Value.ToMB()

$a.TotalItemSize.Value.ToKB()

Ho lo stesso problema. Non sono sicuro se questo risolto. Ho questa, che è abbastanza brutto - ma funziona:

$a = get-mailbox USER | get-mailboxstatistics
$intTotalItemSize = [int]$a.TotalItemSize.SubString($a.TotalItemSize.indexof("(")+1, $a.TotalItemSize.indexof(" b")-$a.TotalItemSize.indexof("("))

Prova questo per la vostra espressione dimensioni:

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

Credo che ci sia anche un metodo ToKB().

MVP Shay Levy ha approfondito questo sul suo blog (http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2011/08/22/get-full-control-over-your-exchange- remote-powershell-session.aspx).

In sostanza, è necessario modificare un'impostazione nella directory virtuale PowerShell nel server che si sta Remoting a.

Questa è una grande notizia per coloro che sono i servizi remoti ai server Exchange che hanno questo tipo di controllo sulla, ma non è utile per quelli di noi che utilizzano ospitato soluzioni Exchange e non può cambiare queste impostazioni. Suppongo che dovremo solo di abbandonare alcuni dei uber-freddezza di PowerShell e tornare al parsing della stringa per ottenere i byte e convertire da lì.

- EDIT -

Questo è il modo ho affrontato l'output di un file di tutte le dimensioni delle cassette postali dei miei utenti. Potrebbe essere compresso un po 'oltre, ma è un po' più leggibile in questo modo.

$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)"
}

Si prega, si veda questo articolo: http://blogs.technet.com/b/gary/archive/2010/02/20/the-get-mailboxstatistics-cmdlet-the- totalitemsize-proprietà-e-che-fastidioso-po-b.aspx

Get-Mailbox | Get-MailboxStatistics | Add-Member -MemberType ScriptProperty -Name TotalItemSizeinMB -Value {$this.totalitemsize.value.ToMB()} -PassThru | Format-Table DisplayName,TotalItem*

avevo bisogno di avere questo lavoro al di fuori di una sessione di servizi remoti, così ho semplificato la risposta da Greybear a questo:

$a = get-mailbox USER | get-mailboxstatistics
$intTotalItemSize = [int64]($a.TotalItemSize -split '[\( ]')[3]

O nel formato della domanda originale ::

Get-MailboxStatistics -Server <serverfqdn> | Select-Object -Property DisplayName,@{label="TotalItemSize";expression={[int64]($_.TotalItemSize -split '[\( ]')[3]}} | ft

sono reso conto che [int] fallirebbe per le cassette postali oltre 4 GB, quindi cambiato in [Int64]. In alternativa, visualizzare le cassette postali in MB:

Get-MailboxStatistics -Server <serverfqdn> | Select-Object -Property DisplayName,@{label="TotalItemSize";expression={[int64](([int64]($_.TotalItemSize -split '[\( ]')[3])/1048576)}} | ft

Il nome deve andare prima che l'espressione. Questo funzionerà.

Get-MailboxStatistics -Identity [name] | select @{label=”User”;expression={$_.DisplayName}},lastlogontime,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}}

Questo funziona per me

@{Name="TotalSize (MB)"; Expression={((($_.TotalItemSize) -split " ")[0])}}

Si potrebbe provare:

get-mailbox -resultsize unlimited | Get-MailboxStatistics | ft displayname,@{label="Total Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top