0

我有以下命令計算一個屬性如何使用Measure-Object在Powershell中進行反射/動態輸入?

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

我想使「測量-對象」跟蹤數個proerties,總的和平均的平均值。

$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,這樣我可以訪問總量爲每個對象。

回答

1

%ForEach-Object的別名。如果我理解正確,那麼您想在TotalItemSize值的集合上使用Measure-Object。如果是這樣,你應該使用select,這是Select-Object的別名。沿着這些路線的東西:

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

培訓課程,請糾正我,如果我沒有正確地理解您的問題和;)

編輯:

我不知道一個乾淨的/內置的方式以滿足你第二個問題的條件,我剛剛注意到(即通過多個屬性)。我檢查,ExpandProperty不一樣神奇允許您選擇多個屬性這種方式;)我建議重寫代碼了一下,列舉通過屬性反正:對數值

$MeasureProps = "AssociatedItemCount", [...], "TotalItemSize" 
foreach($prop in $MeasureProps) 
{ 
    select $prop | Measure-Object -Property $prop -Sum -Average 
} 
+0

啊,這讓我更接近;我剛更新了這個問題 – LamonteCristo

2

Measure-Object作品。問題是TotalItemSize和TotalDeletedItemSize值是字符串。要解決此限制,你可以使用Select-Object cmdlet來,然後再擴大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