0

我有以下命令计算一个属性的平均值

  $Databases = Get-MailboxDatabase -Status
    foreach($Database in $Databases) {
        $DBSize = $Database.DatabaseSize
        $MBCount = @(Get-MailboxStatistics -Database $Database.Name).Count

    # This line is giving me trouble
        $MBAvg = Get-MailboxStatistics -Database $Database.Name    |   %{$_.TotalItemSize.value.ToMb()} |  Measure-Object -Average          

        New-Object PSObject -Property @{
            Server = $Database.Server.Name
            DatabaseName = $Database.Name
            LastFullBackup = $Database.LastFullBackup
            MailboxCount = $MBCount
            "DatabaseSize (GB)" = $DBSize.ToGB()
            "AverageMailboxSize (MB)" = $MBAvg.Average
            "WhiteSpace (MB)" = $Database.AvailableNewMailboxSpace.ToMb()
            Items = 0
            LogicalSize = 0
        }
    }

我想让“Measure-Object”跟踪几个属性,总数和平均值。

$MeasureProps = "AssociatedItemCount", "DeletedItemCount", "ItemCount", "TotalDeletedItemSize", "TotalItemSize"

   $Databases = Get-MailboxDatabase -Status
    foreach($Database in $Databases) {
        $DBSize = $Database.DatabaseSize
        $MBCount = @(Get-MailboxStatistics -Database $Database.Name).Count

        $MBStats = Get-MailboxStatistics -Database $Database.Name     

        #Expanded version of problem line above
        foreach($mb in $MBStats)
        {
         foreach($prop in $MeasureProps)
         {
            #this is a random hack.  I have almost no idea what I'm doing.
           select  $mb.$prop | Measure-Object -Property $prop -Sum -Average
         }          
        }

        New-Object PSObject -Property @{
            Server = $Database.Server.Name
            DatabaseName = $Database.Name
            LastFullBackup = $Database.LastFullBackup
            MailboxCount = $MBCount
            "DatabaseSize (GB)" = $DBSize.ToGB()
            "AverageMailboxSize (MB)" = $MBAvg.Average
            "WhiteSpace (MB)" = $Database.AvailableNewMailboxSpace.ToMb()
            Items = 0
            LogicalSize = 0
        }
    }

我遇到的问题是弄清楚如何编辑%{$_.TotalItemSize.value,以便我可以访问每个对象的总数。

4

2 回答 2

2

Measure-Object适用于数值。问题是 TotalItemSize 和 TotalDeletedItemSize 值是字符串。要解决此限制,您可以使用Select-Objectcmdlet 首先扩展 TotalItemSize 和 TotalDeletedItemSize 的值,然后将结果通过管道传输到Measure-Object

$TotalItemSize = @{n='TotalItemSize';e={$_.TotalItemSize.Value.ToMB()}}
$TotalDeletedItemSize = @{n='TotalDeletedItemSize';e={$_.TotalDeletedItemSize.Value.ToMB()}} 

Get-MailboxStatistics -Database 'Mailbox Database 0311695863' | `
    Select-Object -Property AssociatedItemCount,DeletedItemCount,ItemCount,$TotalItemSize,$TotalDeletedItemSize | `
        Measure-Object -Property AssociatedItemCount,DeletedItemCount,ItemCount,TotalItemSize,TotalDeletedItemSize -Sum -Average
于 2011-12-05T07:36:51.407 回答
1

%是 的别名ForEach-Object。如果我理解正确,您想Measure-Object在一组TotalItemSize值上使用。如果是这样,您应该使用select,它是Select-Object. 这些方面的东西:

[...] | select -ExpandProperty TotalItemSize | Measure-Object [...]

当然,如果我没有正确理解您的问题,请纠正我;)

编辑:

我不知道满足您第二个问题条件的干净/内置方式,我刚刚注意到(即通过多个属性)。我检查并ExpandProperty没有像允许您以这种方式选择多个属性那样神奇;)我建议稍微重写代码并枚举属性:

$MeasureProps = "AssociatedItemCount", [...], "TotalItemSize"
foreach($prop in $MeasureProps)
{
    select $prop | Measure-Object -Property $prop -Sum -Average
}
于 2011-12-04T22:47:17.483 回答