Pregunta

Estoy intentando crear informes sencillos en Exchange 2010 tamaño del buzón.

Aunque esto funciona:

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

esto no (estancias segunda columna vacía):

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

El problema es que necesito el tamaño como un entero, por lo que la primera línea de código no sirve a mi propósito. De acuerdo a varios sitios web, la segunda línea de código debe trabajo, pero por desgracia no en mi máquina.

Sé que podría analizar el valor después de usar la primera línea, pero eso sería innecesariamente ineficaz, ¿verdad? : -)

La esperanza alguien puede ayudar.

Saludos, Kevin

¿Fue útil?

Solución

Si la realización de una sesión PS importado los métodos .ToMB () se pierde como el tipo se convierte en un objeto personalizado. El $ variable.TotalItemSize.Value se convierte en una matriz de dos elementos [0] en KB, MB o GB y [1] siempre en bytes.

Así que para utilizar este podemos jugar con cuerdas para lograr lo que queremos .. en la mano larga para mayor claridad

$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

}

Espero que esto ayude

Otros consejos

Esto funcionó para mí

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

$a.TotalItemSize.Value.ToMB()

$a.TotalItemSize.Value.ToKB()

Tengo el mismo problema. No estoy seguro de si resuelto este. Tengo esto, que es bastante feo - pero funciona:

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

Probar para su expresión tamaño:

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

Creo que hay también un método ToKB().

MVP Shay Levy ha profundizado en esto en su blog (http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2011/08/22/get-full-control-over-your-exchange- remoto-powershell-session.aspx).

Básicamente, tiene que modificar una configuración en el directorio virtual de PowerShell en el servidor que está a la interacción remota.

Esta es una gran noticia para aquellos que son comunicación remota a los servidores de Exchange que tienen este tipo de control sobre, pero no es útil para aquellos de nosotros que utilizan soluciones alojadas de cambio y no se puede cambiar esta configuración. Supongo que tendremos que abandonar algunos de los súper-frescor de PowerShell y volver a analizar la cadena para obtener los bytes y convertir de allí.

- Editar -

Esta es la forma en Abordé la salida de un archivo de todos los tamaños de buzones de mis usuarios. Podría ser comprimido un poco más, pero es un poco más fácil de leer de esta manera.

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

Por favor, vea este artículo: http://blogs.technet.com/b/gary/archive/2010/02/20/the-get-mailboxstatistics-cmdlet-the- totalitemsize-propiedad-y-que-molesta-poco-b.aspx

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

necesitaba tener esta fuera obra de una sesión de comunicación remota, por lo que he simplificado la respuesta de Greybear a esto:

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

O en el formato de la pregunta original ::

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

Realizado que [int] sería un fracaso para los buzones de más de 4 GB, por lo que cambió a [Int64]. Alternativamente, mostrar los buzones de correo en MB:

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

El nombre tiene que ir antes de la expresión. Esto funcionará.

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

Esto funciona para mí

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

Usted puede tratar de:

get-mailbox -resultsize unlimited | Get-MailboxStatistics | ft displayname,@{label="Total Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top