Question

Je suis en train de créer des rapports simples sur la taille de la boîte aux lettres Exchange 2010.

Bien que cela fonctionne:

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

cela ne (reste deuxième colonne vide):

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

Le problème est que j'ai besoin de la taille comme un entier, donc la première ligne de code ne sert pas mon but. Selon plusieurs sites de la deuxième ligne de code devrait travaux, mais malheureusement pas sur ma machine.

Je sais que je pourrais analyser la valeur après avoir utilisé la première ligne, mais ce serait inutilement inefficace, ne serait-il? : -)

L'espoir quelqu'un peut aider.

Cordialement, Kevin

Était-ce utile?

La solution

Si vous effectuez d'une session PS importé les méthodes .ToMB () est perdue comme le type devient un objet personnalisé. Le variable.TotalItemSize.Value $ devient un tableau à deux éléments [0] en Ko, Mo ou Go et [1] toujours en octets.

Donc, pour utiliser ce que nous pouvons jouer avec des cordes pour obtenir ce que nous voulons .. dans la main pour plus de clarté à long

$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

}

J'espère que cette aide

Autres conseils

cela a fonctionné pour moi

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

$a.TotalItemSize.Value.ToMB()

$a.TotalItemSize.Value.ToKB()

J'ai la même question. Je ne sais pas si vous avez résolu cela. J'ai cela, ce qui est assez laid - mais fonctionne:

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

Essayez ceci pour votre expression de taille:

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

Je crois qu'il ya aussi une méthode ToKB().

MVP Shay Levy a puisé dans ce sur son blog (http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2011/08/22/get-full-control-over-your-exchange- à distance powershell-session.aspx).

En fait, vous devez modifier un paramètre dans le répertoire virtuel PowerShell sur le serveur que vous Remoting.

Ce sont d'excellentes nouvelles pour ceux qui sont Remoting pour les serveurs Exchange qu'ils ont ce genre de contrôle sur, mais n'est pas utile pour ceux d'entre nous qui utilisent solutions hébergées Exchange et ne peuvent pas modifier ces paramètres. Je suppose que nous allons simplement devoir abandonner une partie de l'uber-fraîcheur de PowerShell et revenir à l'analyse syntaxique de la chaîne pour obtenir les octets et convertir à partir de là.

- EDIT -

Voici comment je me suis attaqué à sortir un fichier de toutes les tailles de boîte aux lettres de mes utilisateurs. Il pourrait être compressé un peu plus loin, mais il est un peu plus lisible de cette façon.

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

S'il vous plaît, consultez cet article: http://blogs.technet.com/b/gary/archive/2010/02/20/the-get-mailboxstatistics-cmdlet-the- totalitemsize-propriété et qui-satanés-peu-b.aspx

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

je devais avoir ce travail en dehors d'une session de communication à distance, donc j'ai simplifié la réponse de Greybear à ceci:

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

Ou dans le format de la question initiale ::

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

Réalisés que [int] échouerait pour les boîtes aux lettres plus de 4 Go, donc changé à [Int64]. Sinon, afficher les boîtes aux lettres en Mo:

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

Le nom doit aller avant l'expression. Cela fonctionne.

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

Cela fonctionne pour moi

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

Vous pouvez essayer:

get-mailbox -resultsize unlimited | Get-MailboxStatistics | ft displayname,@{label="Total Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top