首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Powershell中使用Measure-Object执行反射/动态类型?

如何在Powershell中使用Measure-Object执行反射/动态类型?
EN

Stack Overflow用户
提问于 2011-12-05 05:48:11
回答 2查看 539关注 0票数 0

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

代码语言:javascript
复制
  $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
        }
    }

我想让“测量对象”跟踪几个属性,总数和平均值。

代码语言:javascript
复制
$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,这样我就可以访问每个对象的总数。

EN

回答 2

Stack Overflow用户

发布于 2011-12-05 15:36:51

Measure-Object对数值起作用。问题是TotalItemSize和TotalDeletedItemSize值都是字符串。若要解决此限制,可以使用Select-Object cmdlet首先展开TotalItemSize和TotalDeletedItemSize的值,然后通过管道将结果传递给Measure-Object

代码语言:javascript
复制
$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
票数 2
EN

Stack Overflow用户

发布于 2011-12-05 06:47:17

%ForEach-Object的别名。如果我理解正确的话,您希望在TotalItemSize值集合上使用Measure-Object。如果是这样,您应该使用select,它是Select-Object的别名。大致是这样的:

代码语言:javascript
复制
[...] | select -ExpandProperty TotalItemSize | Measure-Object [...]

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

编辑:

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

代码语言:javascript
复制
$MeasureProps = "AssociatedItemCount", [...], "TotalItemSize"
foreach($prop in $MeasureProps)
{
    select $prop | Measure-Object -Property $prop -Sum -Average
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8378847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档